Использование jq для слияния дочерних файлов в главный файл - PullRequest
1 голос
/ 07 мая 2020

Есть много вопросов, связанных с jq, о слиянии JSON документов, но все они, похоже, касаются слияния документов с одинаковой структурой.

Моя проблема в другом, мне нужно объединить дочерние документы в родительский документ, где дочерний и родительский документы имеют разную структуру.

Родительский документ выглядит так:

{
  "resources": [
    {
      "name": "child0",
      "properties": {
        "template": {}
      }
    },
    {
      "name": "child1",
      "properties": {
        "template": {}
      }
    },
    {
      "name": "child2",
      "properties": {
        "template": {}
      }
    }
  ]
}

Мне нужно объединить дочерние документы документы в .resources[].properties.template, так что первый файл находится в .resources[0].properties.template, второй файл находится в .resources[1].properties.template et c.

Обратите внимание, что структура дочерних документов здесь не важна, так как я хочу объединить их целиком.

Я действительно заставил это работать, но с использованием нескольких команд:

jq '.resources[0].properties.template += input' main.json child0.json > temp0.json
jq '.resources[1].properties.template += input' temp0.json child1.json > temp1.json
jq '.resources[2].properties.template += input' temp1.json child2.json > temp2.json
mv temp2.json merged.json
rm temp*.json

Это довольно уродливо - я ищу одну jq команда, которая может объединять дочерние файлы.

1 Ответ

2 голосов
/ 07 мая 2020

Вы были близки. Предполагая, что количество объектов в resources равно количеству дочерних документов, это должно сработать:

jq '.resources[].properties.template |= . + input' parent children...

демонстрация на jqplay.org

...