У меня есть два файла json, orig.json и patch.json, которые имеют похожие форматы.
orig.json:
{
"a": {
"a1": "original a1",
"a2": "original a2",
"list": ["baz", "bar"]
},
"b": "original value B"
}
patch.json:
{
"a": {
"a1": "patch a1",
"list": ["foo"]
},
"c": "original c"
}
В настоящее время я использую jq
для их рекурсивного объединения.Однако поведение jq по умолчанию для списков - просто переназначение.Пример вывода из jq с использованием $ jq -s '.[0] * .[1]' orig.json patch.json
:
{
"a": {
"a1": "patch a1",
"a2": "original a2",
"list": [
"foo"
]
},
"b": "original value B",
"c": "original c"
}
Обратите внимание, что a.list
теперь равно patch.json's a.list
.Я хочу, чтобы новый a.list
был списком orig.json и списками patch.json.Другими словами, я хочу, чтобы a.list
равнялся ["baz", "bar", "foo"]
.
Есть ли способ, которым я могу легко сделать это с помощью jq, возможно, переопределив стратегию слияния по умолчанию для массивов?