Как я могу добавить к существующему объекту с помощью JSONata?

Мне нужно добавить элемент к произвольно сложному объекту с помощью JSONata.

Я не знаю заранее все элементы объекта.

Например, скажем, я хочу добавить

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

К объекту, который выглядит так:

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

Но в нем может быть любое количество или сочетание других элементов.

Я могу заменить весь объект, но не могу придумать, как к нему добавить.


person Julian Knight    schedule 02.08.2017    source источник


Ответы (2)


Начиная с JSONata 1.3 для этого можно использовать функцию $merge. См. Пример здесь.

person Andrew Coleman    schedule 18.08.2017
comment
Драт, как я это скучал! Спасибо. - person Julian Knight; 09.09.2017

Вот одна из техник, которые я использовал для объединения двух объектов ...

Разделите все ключи / значения объекта на массив пар и создайте новый объект:

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

Обратите внимание, что для этого требуется один входной объект, который содержит старые и новые объекты в отдельных полях. (на самом деле, поскольку функция $ keys () может работать с массивом объектов, вы не ограничены только двумя объектами - фактически, это может быть массив объектов вместо отдельных полей - ваш пробег может различаются)

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

Кроме того, порядок двух объектов имеет значение, поскольку первое уникальное значение ключа будет иметь приоритет. Например, если newObject является первым, и оба объекта содержат поле «b», выходное значение будет использоваться из первого объекта (фактически перезаписывая значение oldObject для «b»). Итак, объединенный выходной объект:

{
  "a": 1,
  "b": 2,
  "xx": "An",
  "yy": "Example",
  "zz": 1
}
person SteveR    schedule 08.08.2017