列出 JSON 的所有键和值

2024-05-21

假设我有一些如下所示的 JSON:

{
"items":
    {
        "item":
            [
                {
                    "id": "0001",
                    "type": "donut",
                    "name": "Cake",
                    "ppu": 0.55,
                    "batters":
                        {
                            "batter":
                                [
                                    { "id": "1001", "type": "Regular" },
                                    { "id": "1002", "type": "Chocolate" },
                                    { "id": "1003", "type": "Blueberry" },
                                    { "id": "1004", "type": "Devil's Food" }
                                ]
                        },
                    "topping":
                        [
                            { "id": "5001", "type": "None" },
                            { "id": "5002", "type": "Glazed" },
                            { "id": "5005", "type": "Sugar" },
                            { "id": "5007", "type": "Powdered Sugar" },
                            { "id": "5006", "type": "Chocolate with Sprinkles" },
                            { "id": "5003", "type": "Chocolate" },
                            { "id": "5004", "type": "Maple" }
                        ]
                },

                ...

            ]
    }
}

我想要一个函数返回制表符分隔数据的列表(其中 -> 是制表符)。像这样的东西:

items.item.length -> 1
items.item[0].id -> 0001
items.item[0].type -> donut
items.item[0].name -> Cake
items.item[0].ppu -> 0.55
items.item[0].batters.batter.length -> 4
items.item[0].batters.batter[0].id -> 1001
items.item[0].batters.batter[0].type -> Regular
items.item[0].batters.batter[1].id -> 1002
items.item[0].batters.batter[1].type -> Chocolate
items.item[0].batters.batter[2].id -> 1003
items.item[0].batters.batter[2].type -> Blueberry
items.item[0].batters.batter[3].id -> 1004
items.item[0].batters.batter[3].type -> Devil's Food
items.item[0].topping.length -> 7
items.item[0].topping[0].id -> 5001
items.item[0].topping[0].type -> None
items.item[0].topping[0].id -> 5002
items.item[0].topping[0].type -> Glazed

...

我在想类似的事情

function json2txt(obj) {
var txt = '';
    for (var key in obj) {
       if (obj.hasOwnProperty(key)) {
          if ("object" == typeof(obj[key])) {
             json2txt(obj[key]);
          } else txt += obj + '\t' + obj[key] + '\r';
       }
    }
}

“糟糕!您的编辑无法提交,因为:

您的帖子没有太多上下文来解释代码部分;请更清楚地解释你的情况。”

这也相当令人沮丧。


使用递归函数,您走在正确的轨道上。不过,您需要向该函数添加一个参数 - 它需要知道对象中当前点的路径。

另外,使用\n, not \r.

var inputObject = {
    items: { 
        foo: [ 'apples', 'oranges', 'peaches' ],
        bar: 'baz',
        spam: 'eggs'
     }
};
function json2txt(obj, path)
{
    var txt = '';
    for (var key in obj)
    {
        if (obj.hasOwnProperty(key))
        {
            if ('object' == typeof(obj[key]))
            {
                txt += json2txt(obj[key], path + (path ? '.' : '') + key);
            } 
            else
            {
                txt += path + '.' + key + '\t' + obj[key] + '\n';
            }
        }
    }
    return txt;
}
json2txt(inputObject, '');

有趣的问题!

对于您的示例数据,我的代码给出:

items.item.0.id 0001
items.item.0.type   donut
items.item.0.name   Cake
items.item.0.ppu    0.55
items.item.0.batters.batter.0.id    1001
items.item.0.batters.batter.0.type  Regular
items.item.0.batters.batter.1.id    1002
items.item.0.batters.batter.1.type  Chocolate
items.item.0.batters.batter.2.id    1003
items.item.0.batters.batter.2.type  Blueberry
items.item.0.batters.batter.3.id    1004
items.item.0.batters.batter.3.type  Devil's Food
items.item.0.topping.0.id   5001
items.item.0.topping.0.type None
items.item.0.topping.1.id   5002
items.item.0.topping.1.type Glazed
items.item.0.topping.2.id   5005
items.item.0.topping.2.type Sugar
items.item.0.topping.3.id   5007
items.item.0.topping.3.type Powdered Sugar
items.item.0.topping.4.id   5006
items.item.0.topping.4.type Chocolate with Sprinkles
items.item.0.topping.5.id   5003
items.item.0.topping.5.type Chocolate
items.item.0.topping.6.id   5004
items.item.0.topping.6.type Maple
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列出 JSON 的所有键和值 的相关文章

随机推荐

  • Jenkins:如何使由于工作区问题而导致的失败构建的颜色从红色变为灰色?

    我们的詹金斯构建应该只是red当有一个构建代码时出现问题比如编译问题 如果存在管理员问题 例如工作空间已满 某些从属设备已关闭 我们需要将这份工作变成gray 表明有一个詹金斯本身的问题 但开发商应该not保持高度戒备 这是一个需要将作业变
  • Crashlytics Android Studio 插件无法初始化

    我正在运行 Android Studio 0 5 1 我已经下载了 Crashlytics Android Studio 插件并从光盘安装了它 当我重新启动 Android Studio 时 出现以下异常 Plugin com crashl
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • Perl regex:如何知道匹配数

    我循环遍历一系列正则表达式并将其与文件中的行进行匹配 如下所示 for my regex regexs ref LINE for rawfile regex do do something here next LINE 有没有办法让我知道我
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 由于缺少会话而在 Next.js 中使用 Next-Auth 进行重定向时,如何显示 Toast 通知? [复制]

    这个问题在这里已经有答案了 例如 假设我有一个名为internal tsx 的页面 其中包含 export const getServerSideProps GetServerSideProps async ctx gt const ses
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 使用@Transactional(readOnly = true) 有什么优点?

    我是初学者 据我了解 Transactional只需确保类或方法的所有内部工作都用注释 Transactional将被包装在一个事务中 并且来自外部源的所有调用都将创建一个新事务 但是为什么我们实际上需要在下面的存储库中使用这些注释以及使用
  • 口水累积正在更新一个不相关的事实

    在 Drools 中使用累积时 会针对未更新的事实评估并触发规则 规则如下 rule WidgetsPerUser when user User accumulate Widget checkIsUser user widgetCount
  • 开发人员实际上是否使用 vim 在 Windows 操作系统上编写代码(Java)? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 jQuery 向表中添加新行,并为其分配递增的 id

    我有一个现有的 HTML 表格 它是用户输入 GPS 点的表单的一部分 用户还可以选择上传 GPS 数据点 我想要一个用户可以按下的按钮 其中一些 Javascript 会向表中添加一个或多个新行 但新行必须继续增加表中使用的名称和 id
  • jQuery 验证规则和消息 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在设置 jQuery 验证的规则和
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • JavaScript 动画平滑滚动

    默认情况下 当您有这样的片段链接时 a href some url some fragment some text a 浏览器立即向下滚动到该片段 我该如何编程才能使用标准 JS 顺利地向下移动到该片段 这是一个例子 Example htt
  • 如何在 WordPress HTML 中包含“onclick”对象

    我正在尝试将 onclick 对象添加到触发事件的单站点 即而不是多站点 WordPress 中的页面 代码是 a href Send a voice message a 当尝试保存代码时 WordPress 会删除 onclick 对象
  • 列出 JSON 的所有键和值

    假设我有一些如下所示的 JSON items item id 0001 type donut name Cake ppu 0 55 batters batter