У меня есть два следующих json в качестве ввода:
{
"one": {
"vars": [
{
"name": "a",
"value": "a"
},
{
"name": "b",
"value": "b"
}
]
},
"two": {
"vars": [
{
"name": "c",
"value": "c"
},
{
"name": "d",
"value": "d"
}
]
},
"extras": "whatever"
}
{
"one": {
"vars": [
{
"name": "e",
"value": "e"
},
{
"name": "f",
"value": "f"
}
]
},
"two": {
"vars": [
{
"name": "g",
"value": "g"
},
{
"name": "h",
"value": "h"
}
]
}
}
И я хотел бы объединить их, чтобы получить следующий результат, где каждый массив vars
каждого раздела объединен вместе:
{
"one": {
"vars": [
{
"name": "a",
"value": "a"
},
{
"name": "b",
"value": "b"
},
{
"name": "e",
"value": "e"
},
{
"name": "f",
"value": "f"
}
]
},
"two": {
"vars": [
{
"name": "c",
"value": "c"
},
{
"name": "d",
"value": "d"
},
{
"name": "g",
"value": "g"
},
{
"name": "h",
"value": "h"
}
]
},
"extras": "whatever"
}
В идеале, но не обязательно:
- ключи (здесь
one
и two
) будут произвольными, и может присутствовать неопределенное количество из них.
- массив
vars
не будет содержать дубликатов (на основе name
), и будет применяться правый приоритет для переопределения значений из первого массива.
Мне удалось объединить два объекта и только 1 массив с помощью следующей команды, но ключ жестко закодирован, и я немного застрял оттуда:
jq -s '.[0].one.vars=([.[].one.vars]|flatten)|.[0]' file1.json file2.json