我正在尝试对我一无所知的 JSON 数据执行操作(更新值、删除键、添加键等)。这些项目本质上是属性文件,而不是从应用程序返回的 JSON 数据。这些文件可能非常不同,我需要开发一种方法来执行这些操作,而无需对 JSON 数据一无所知。
我正在跟踪存储 key 的路径。如果我有如下所示的示例数据,我会存储像“/key1/innerKey5/”这样的路径,并使用 getNodeData 获取带有 key innerKey6 的数据。
如果我有项目的路径和键,我如何以编程方式在 JSON 数据中找到该项目并删除或更新该项目?
var originalData = someMethodToGetJSONData();
var currentData; // Global variable storing a copy of the original data which can be modified
json = {
"key1": {
"innerKey1": {
"innerKey2" : {
"innerKey3": "value1",
"innerKey4": "value2"
}
},
"innerKey5": {
"innerKey6": "value1"
}
},
"key2": "value3",
"key3": "value4"
}
function getKeysFromPath(keyPath) {
var split = keyPath.split('/');
var keys = [];
for(var i = 0; i < split.length; i++) {
if(split[i] != '') {
keys.push(split[i]);
}
}
return keys
}
function getNodeData(keyPath) {
var keys = getKeysFromPath(keyPath);
nodeData = currentItemData;
for(var i = 0; i < keys.length; i++) {
nodeData = nodeData[keys[i]];
}
return nodeData;
}
data = getNodeData('/key1/innerKey5/');
key = 'innerKey6';
console.log('Data: ' + data[key]);
最佳答案
Lodash 有一些有用的功能来做这类事情。
_.get, _.set, _.unset
因此,如果您将节点存储为字符串形式,例如。 -> a.b.c[0].k,这3个函数应该可以做你想做的。
关于javascript - 在不知道任何键的情况下遍历整个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39822814/