jq - объединить только один ключ из второго JSON файла в основной JSON файл - PullRequest
1 голос
/ 25 февраля 2020

Дано:

master. json:

{"a":[{"x":1}], "b":1}

extra. json:

{"a":[{"x":2}], "somekey2":2, "somekey3":3}

Ожидаемый результат:

{
  "a": [
    {
      "x": 1
    },
    {
      "x": 2
    }
  ],
  "b": 1
}

Мне нужно объединить master.json содержимое ключа "a" от extra.json, игнорируя все остальные ключи, которые может иметь второй JSON.

Пробовал, но это не сработало

jq -s "add" '.[a] + .[a]' x1 x2

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Вам не нужно их хлебать. Без каких-либо флагов вы можете получить доступ ко второму вводу по ключевому слову input.

$ jq '.a += input.a' master.json extra.json 
{
  "a": [
    {
      "x": 1
    },
    {
      "x": 2
    }
  ],
  "b": 1
}
1 голос
/ 25 февраля 2020

До тех пор, пока файлы не имеют огромного размера, их нужно стереть и добавить содержимое массива a.

jq -s '.[].a = ([.[].a]|add|unique)|.[0]' master.json extra.json

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

...