如何使用 JSONata 添加到现有对象?
How can I add to an existing object using JSONata?
我需要能够使用 JSONata 向任意复杂的对象添加元素。
事先不知道对象中的所有元素
例如,假设我要添加
"newElement": { "a": 1, "b": 2 }
到看起来像的对象:
{ "xx": "An", "yy": "Example", "zz": 1 }
但它可能包含任意数量或混合的其他元素。
我可以替换整个对象,但不知道如何添加。
这是我用来合并两个对象的一种技术...
将所有对象 keys/values 拆分成一对数组并构建一个新对象:
$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
}
从 JSONata 1.3 开始,您可以使用 $merge
函数来执行此操作。请参阅示例 here。
我需要能够使用 JSONata 向任意复杂的对象添加元素。
事先不知道对象中的所有元素
例如,假设我要添加
"newElement": { "a": 1, "b": 2 }
到看起来像的对象:
{ "xx": "An", "yy": "Example", "zz": 1 }
但它可能包含任意数量或混合的其他元素。
我可以替换整个对象,但不知道如何添加。
这是我用来合并两个对象的一种技术...
将所有对象 keys/values 拆分成一对数组并构建一个新对象:
$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 }
从 JSONata 1.3 开始,您可以使用 $merge
函数来执行此操作。请参阅示例 here。