Я передаю объект JSON в jq и хочу добавить дополнительные объекты во внутренний массив ('аксессуары'), если его родительский массив ('платформы') соответствует определенному имени.
Здесь мой источник JSON:
{
"bridge": {
"name": "Homebridge",
"port": 51395
},
"accessories": [],
"platforms": [
{
"name": "Config",
"port": 8581,
"platform": "config"
},
{
"platform": "homebridge-cbus.CBus",
"name": "CBus",
"client_ip_address": "127.0.0.1",
"accessories": [
{
"values": "existing"
}
]
}
]
}
Это прекрасно работает:
jq '.platforms[1].accessories += [{ "values" : "NEW" }]'
... но, конечно, ожидать, что платформы [1] всегда будут иметь тот массив, который я хочу чтобы добавить, поэтому я попытался сформировать правильный синтаксис для поиска или if / then / else, чтобы действовать только на .name соответствующего.
Я думал, что это мое решение:
jq '.platforms[] | if ( .name=="CBus" ) then .accessories += [{ "values" : "NEW" }] else . end'
... пока я не понял, что это всего лишь прохождение «платформ» через объект «мост» и пустой внешний массив «аксессуары», который мне нужно сохранить. проблема похожа на JQ | Обновление элемента массива, выбранного с помощью `select` , но я пробовал МНОГО комбинаций, но просто не могу прорваться.
Изменить: вот правильный JQPlay, который я был работает с:
https://jqplay.org/s/dGDswqAEte
Спасибо за любую помощь.