jq-在值上合并两个json文件

时间:2018-12-04 17:06:06

标签: json join jq

我有两个结构如下的json文件:

文件1

[
{
    "id": 25422,
    "location": "Hotel X",
    "suppliers": [
        12
    ]
},
{
    "id": 25423,
    "location": "Hotel Y",
    "suppliers": [
        13
    ]
}]

文件2

[
{
    "id": 12,
    "vatNumber": "0000000000"
},
{
    "id": 14,
    "vatNumber": "0000000001"
}]

我想要这样的结果

[
{
    "id": 25422,
    "location": "Hotel X",
    "suppliers": [
        12
    ],
    "vatNumber": "0000000000"
},
{
    "id": 25423,
    "location": "Hotel Y",
    "suppliers": [
        13
    ],
}]

对我来说重要的是,在第一个文件中设置了匹配的vatNumber。如果简化了工作,则在合并后不再需要供应商阵列。 另外,jq不是必需的,但是我需要我可以通过终端使用的东西来设置脚本。 预先谢谢你。

1 个答案:

答案 0 :(得分:2)

这是许多可能的解决方案之一。如果您的jq没有INDEX/2,请升级您的jq或包括其def(例如,可从https://github.com/stedolan/jq/blob/master/src/builtin.jq获得):

调用:

jq -n --argfile f1 file1.json --argfile f2 file2.json -f merge.jq

merge.jq:

INDEX($f2[] ; .id) as $dict
| $f1
| map( ($dict[.suppliers[0]|tostring]|.vatNumber) as $vn
       | if $vn then .vatNumber = $vn else . end)