Как изменить вложенный объект с помощью jq

Учитывая это

{
  "some": "property",
  "nested": {
    "hello": "world"
  }
}

Я хотел бы получить этот результат с помощью jq

{
  "some": "property",
  "nested": {
    "hello": "world",
    "freshly": "added"
  }
}

Итак, как я могу добавить только что добавленное поле? Я не знаю, сколько свойств находится на корневом уровне (и я хочу сохранить их все), я знаю только имя вложенного объекта (здесь «вложенный»), имя свойства, которое я хотел бы добавить ( здесь «свеже») и его значение.


person ValLeNain    schedule 29.07.2015    source источник


Ответы (3)


Просто присвойте новое значение вложенному объекту.

.nested.freshly = "added"
person Jeff Mercado    schedule 29.07.2015

Ну я сам узнал, как это сделать. Если у вас есть лучшее решение, вы можете дать его здесь.

jq '.nested=(.nested + {"freshly": "added"})'
person ValLeNain    schedule 29.07.2015
comment
Хотя ответ Джеффа более точен, он также очень полезен, когда карта, содержащая ключи, создается каким-либо другим способом. Тем не менее, я бы просто написал это как .nested += {"freshly": "added"} - person ; 29.07.2015

Вы также можете сделать просто

.nested += {freshly: "added"}

Затем вы можете добавить сразу несколько вложенных ключей

person Kyle Barron    schedule 21.02.2020