Json:打印某个键的值

时间:2018-06-04 21:12:25

标签: javascript

我已经阅读了类似的问题,但是他们没有使用非常广泛的json示例,而且在经过数小时的试验和错误之后我还没有能够解决这个问题。

所以我有以下(部分)Json结构:(我输入随机数据)

{
    "name": "Game1",
    "children": [
    {
        "name": "World1",
        "children": [
        {
            "name": "Level1",
            "children": [
            {
                "name": "Part1",
                "size": 3938,
                "enemies" : [
                    ["Goomba",1000],
                    ["Mushroom",500]
                ]
            }
            ]
        }
        ]
    }
    ]
}

当然有很多游戏,世界等 这意味着每个Level都会有很多Part个。我正在寻找的Part的位置在不同的Levels中是随机的,甚至不存在。 如何通过这种结构和每个例子,例如Part3 print" Part3"以及"敌人:[["姓名",号码] ["名称",号码]]"? 其中的部件没有编号(因此不使用索引[2]。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

这样的事情:

{
  "name": "API-Service",
  "version": "1.0.0",
  "description": "",
  "private": true,
  "scripts": {},
  "dependencies": {
    "apollo-boost": "^0.1.6",
    "apollo-link-http": "^1.5.4",
    "graphql": "^0.13.2",
    "babel-polyfill": "^6.26.0",
    "json-rules-engine": "^2.1.0",
    "node-fetch": "^2.1.2",
    "mysql": "^2.15.0"
  }
}

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

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

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);
   });
}