我已经阅读了类似的问题,但是他们没有使用非常广泛的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]
。
提前谢谢!
答案 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);
});
}