【发布时间】:2019-01-22 10:31:47
【问题描述】:
我有以下两个 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),并且将应用正确的优先级来覆盖第一个数组中的值。
我设法用以下命令合并了这两个对象和只有一个数组,但是密钥是硬编码的,我有点卡住了:
jq -s '.[0].one.vars=([.[].one.vars]|flatten)|.[0]' file1.json file2.json
【问题讨论】: