我需要能够使用JSONata向任意复杂的对象添加元素。
我事先并不知道对象中的所有元素。
例如,假设我要添加
"newElement": { "a": 1, "b": 2 }
对于看起来像这样的对象:
{ "xx": "An", "yy": "Example", "zz": 1 }
但它可能有任何数量或混合的其他元素。
我可以替换整个对象,但我无法解决如何添加它。
答案 0 :(得分:1)
这是我用来合并两个对象的一种技术......
将所有对象键/值拆分为一对数组并构建一个新对象:
$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 }
答案 1 :(得分:1)
从JSONata 1.3开始,您可以使用$merge
函数执行此操作。请参见示例here。