使用JsonPath

时间:2018-02-15 17:46:03

标签: json jsonpath

假设我有这样的json:

[
  {
    "a": 1,
    "b": 2,
    "c": 3,
  },
  {
    "a": 1,
    "b": 2,
    "d": 4
  }
]

是否可以写一个JsonPath来给我:

{
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4
}

列表中元素的顺序不确定,但是我事先知道的元素名称。所以我认为我可以使用JsonPath选择所有名称为' a',' b',' c'或者' d'并将它们放在一个对象中。但是,我现在尝试了几件事情,我开始怀疑我想要的是否可能。

例如,我可以选择一个具有元素c的对象:

$[?(@.c)]

我还可以选择d的值,例如:

$..d

但是我找不到任何方法将它们合并到一个物体中。我想要的JsonPath是可能的还是这是JsonPath的限制?

2 个答案:

答案 0 :(得分:0)

假设您对IE(它的ES6)的填充没有问题,请使用Object.assign:

const object1 = {
  a: 1,
  b: 2,
  c: 3
};
const object2 = {
  d: 4
}

const objectMerged = Object.assign({}, object1, object2);

console.log(objectMerged.c);
console.log(objectMerged.d);

有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Browser_compatibility

答案 1 :(得分:0)

我认为执行此操作的适当方法是删除第二个对象,并将它们之间的差异应用于第一个对象:

[
  { "op": "remove", "path": "/1" },
  { "op": "add", "path": "/0/d", "value": 4 }
]