javascript - 在不知道任何键的情况下遍历整个 JSON 对象

标签 javascript jquery json web

我正在尝试对我一无所知的 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/

相关文章:

json - 使用 Swift 处理 GZipped(包含 JSON)HTTP 响应

javascript - 为什么 observable 装饰器不遵守 debounce 属性?

javascript - 即使状态为 200,WNS 推送通知也不起作用

javascript - 如何获取使用 jQuery 单击的提交按钮的自定义 ID?

java - 系统目录到java列表

java - Spring Boot JSON解析错误: Cannot deserialize error

javascript - 使用 jQuery UI 日期选择器验证日期范围 : order of events

javascript - cordova.file 在 android 的 ionic 项目中未定义

javascript - 如何在 jquery $.each 调用中循环列表项

javascript - 在可滚动菜单外面放置一个框