更新对象映射的值

update value of a map of objects

使用 jq,我如何转换以下内容:

{
  "root": {
    "branch1": {
      "leaf": 1
    },
    "branch2": {
      "leaf": 2
    },
    "branch3": {
      "leaf": 3
    }
  },
  "another-root": {
      "branch": 123
  },
  "foo": "bar"
}

对此:

{
  "root": {
    "branch1": {
      "leaf": "updated"
    },
    "branch2": {
      "leaf": "updated"
    },
    "branch3": {
      "leaf": "updated"
    }
  },
  "another-root": {
      "branch": 123
  },
  "foo": "bar"
}

显然 [] 也可以用在对象上。我有,虽然它只用于列表。

以下是我所需要的。

.root[].leaf="updated"

首先您需要解析 json 然后根据需要使用 for ... in 语句修改生成的对象(下面的示例)

const flatJSON = '{"root":{"branch1":{"leaf":1},"branch2":{"leaf":2},"branch3":{"leaf":3}},"another-root":{"branch":123},"foo":"bar"}';

const parsedJSON = JSON.parse(flatJSON);
const root = parsedJSON.root;

for (let property in root) {
  root[property].leaf = "updated"; (or root[property]["leaf"] = "updated";)
}

如果您想使用 jquery,您必须将 for ... in 语句替换为 jQuery.each() 遍历对象和数组的方法。

不要忘记使用 JSON.stringify() 方法(如果需要)将其转换回 json。

希望这对您有所帮助。 祝一切顺利。