问题描述
我从API收到一个JSON,我需要解析和修改一个属性值。 问题是,我收到的json数据的嵌套结构不一致,因此我无法控制它。
这将禁止我指定像parsedJson.children [0] .property这样的特定深度进行查找,因为可以在像parsedJson.children [0] .children [0]这样的不同嵌套级别上找到我要查找的属性。属性在下一次迭代中。
我目前这样做是可行的
var parsedJson = JSON.parse('{"a":[{"a1":[{"p":0},{"np":1}]}],"b":[{"p":0},{"np":1}],"c":[{"c1":[{"c2":[{"p":0}]},{"np":1}]}]}')
console.log("before modify")
console.log(parsedJson)
modifyProperty(parsedJson,"p",1);
function modifyProperty(obj,prop,val){
for (var key in obj){
if (key == prop){
obj[key] = val;
}
modifyProperty(obj[key],prop,val);
}
}
console.log("after modify")
console.log(parsedJson)
但是我担心以后,如果我从API接收到一个包含大量数据和更深层嵌套级别的json,这可能会影响性能,因为这将需要递归检查所有子节点。
有没有更好/更快的方法呢?
1楼
您可以将第二个参数传递给JSON.parse
,以递归方式转换所有所需的属性值:
var parsedJson = JSON.parse( '{"a":[{"a1":[{"p":0},{"np":1}]}],"b":[{"p":0},{"np":1}],"c":[{"c1":[{"c2":[{"p":0}]},{"np":1}]}]}', (key, val) => key === 'p' ? 1 : val ); console.log(parsedJson);