首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Json:打印某个键的值

Json:打印某个键的值
EN

Stack Overflow用户
提问于 2018-06-05 05:12:25
回答 1查看 37关注 0票数 -2

我读过类似的问题,但他们没有使用非常广泛的json示例,经过几个小时的试验和错误后,我还无法弄清楚这一点。

因此,我有以下(部分) Json结构:(我放入随机数据)

代码语言:javascript
复制
{
    "name": "Game1",
    "children": [
    {
        "name": "World1",
        "children": [
        {
            "name": "Level1",
            "children": [
            {
                "name": "Part1",
                "size": 3938,
                "enemies" : [
                    ["Goomba",1000],
                    ["Mushroom",500]
                ]
            }
            ]
        }
        ]
    }
    ]
}

当然有很多游戏,世界等等。这意味着每个Level都会有很多Part。我正在寻找的Part的位置是随机的,甚至在不同的Levels中没有。如何通过这种结构并为每个实例,例如,Part3打印"Part3“和”every:[“name”,number]?其中的部分没有必要的编号(所以不使用索引[2]。提前谢谢!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 05:25:53

我非常确定完成所需任务的惟一方法是递归地访问JSON文档中的每个节点,检查它是否符合您的条件。您可能会发现Object.keys很有帮助。

如下所示:

代码语言:javascript
复制
function forEachNodeInJSONDoc(jsonDoc, callbackFn, pathArray) {
   const rootPathArray = pathArray ? pathArray.slice() : [];
   Object.keys(jsonDoc).forEach(function(key) {
       var childPath = rootPathArray.slice();
       childPath.push(key);
       callbackFn(jsonDoc[key], childPath);
       forEachNodeInJSONDoc(jsonDoc[key], callbackFn, childPath);
   });
}

这将为文档中的每个节点调用回调函数,此时您可以检查该值是否与您的条件匹配。

这可以像这样使用,例如,查找名称为“level3”的所有节点:

代码语言:javascript
复制
var nodesByPathMatchingLevel3 = {};
function matchesLevel3(node, path) {
   if(node.name === "level3") {
      nodesByPathMatchingLevel3[path.join(':')] = node;
   }
}
forEachNodeInJSONDoc(myJSON, matchesLevel3);
// Nodes by path now contains a key for each path (eg "1:2:5") that had the name level3 with the actual node as the value
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50688851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档