1

我需要能够使用 JSONata 将元素添加到任意复杂的对象。

我事先并不知道对象中的所有元素。

例如,假设我要添加

"newElement": { "a": 1, "b": 2 }

对于一个看起来像这样的对象:

{ "xx": "An", "yy": "Example", "zz": 1 }

但它可能包含任意数量或混合的其他元素。

我可以替换整个对象,但我不知道如何添加它。

4

2 回答 2

3

从 JSONata 1.3 开始,您可以使用该$merge函数来执行此操作。请参见此处的示例。

于 2017-08-18T11:49:17.893 回答
2

这是我用来合并两个对象的一种技术...

将所有对象键/值拆分为一组对并构建一个新对象:

$zip(*.$keys(), *.*) {
    $[0]: $[1]
}

请注意,这需要一个输入对象,该对象在不同的​​字段中包含旧对象和新对象。(实际上,由于 $keys() 函数可以对对象数组进行操作,因此您不仅限于两个对象-实际上,它可以是对象数组而不是单独的字段-您的里程可能会有所不同)

{
    "newObject": { "a": 1, "b": 2 },
    "oldObject": { "xx": "An", "yy": "Example", "zz": 1, "b": 3 }
}

此外,这两个对象的顺序很重要,因为第一个唯一键值将优先。例如,如果 newObject 是第一个,并且两个对象都包含字段“b”,则将使用第一个对象的输出值(有效地覆盖“b”的 oldObject 值)。所以合并后的输出对象是:

{
  "a": 1,
  "b": 2,
  "xx": "An",
  "yy": "Example",
  "zz": 1
}
于 2017-08-08T14:29:32.143 回答