我读过类似的问题,但他们没有使用非常广泛的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
打印"Part3“和”every:[“name”,number]?其中的部分没有必要的编号(所以不使用索引[2]
。提前谢谢!)
发布于 2018-06-05 05:25:53
我非常确定完成所需任务的惟一方法是递归地访问JSON文档中的每个节点,检查它是否符合您的条件。您可能会发现Object.keys很有帮助。
如下所示:
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”的所有节点:
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
https://stackoverflow.com/questions/50688851
复制相似问题