jq - объединить два файла json по значению - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть два файла 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
    ],
}]

Для меня важно, чтобы соответствующие номера vatNumbers были заданы в первом файле.Массивы поставщиков больше не требуются после объединения, если это упрощает работу.Также jq не является обязательным, но мне нужно что-то, что я могу использовать через терминал, чтобы настроить скрипт.Заранее спасибо.

1 Ответ

0 голосов
/ 04 декабря 2018

Вот одно из многих возможных решений.Если ваш 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)
...