объединить массив объектов из двух файлов с помощью jq 1.4 - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть два файла со следующим JSON, которые мне нужно объединить, используя относительную позицию массива каждого объекта:

Файл 1

{
  "input": [
    {
      "email": "test1@gm.com",
      "firstName": "Fred"
    },
    {
      "email": "someone@gm.com",
      "firstName": "James"
    }
  ]
}

Файл 2:

{
  "result": [
    {
      "id": 50,
      "status": "created"
    },
    {
      "id": 51,
      "status": "rejected"
    }
  ]
}

ожидаемый результат - это элементы ввода [1] в сочетании с элементами результата [1] и так далее:

{
  "combined": [
    {
      "email": "test1@gm.com",
      "firstName": "Fred",
      "id": 50,
      "status": "created"
    },
    {
      "email": "someone@gm.com",
      "firstName": "James",
      "id": 51,
      "status": "rejected"
    }
  ]
}

PS: - Я ограничен версией 1.4, так как включенSolaris, поэтому нет функции [входы]

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Если бы вам были доступны более свежие версии jq, вы можете воспользоваться функцией transpose, чтобы довольно легко комбинировать их:

$ jq -n '{ combined: ([inputs[]] | transpose | map(add)) }' input1.json input2.json

Однако, поскольку вы ограничены 1.4, ваши вариантынемного ограничены.При работе с несколькими файлами полезно прочитать все входные данные в память.--slurp позволяет делать это, считывая все входные данные в виде массива.Однако вам придется по-разному застегивать входы.

$ jq --slurp 'add | reduce range(0; .input | length) as $i (.;
    .combined += [.input[$i] + .result[$i]]
) | {combined}' input1.json input2.json
0 голосов
/ 28 февраля 2019

Вы можете использовать опцию --slurp для чтения обоих файлов в одном массиве, и оттуда относительно просто зациклить ключи одного из массивов и добавить соответствующие элементы обоих массивов вместе.

jq --slurp '
{
  combined: [
    .[0].input as $is|
    .[1].result as $rs|
    range(0; $is|length) as $n|
    $is[$n]+$rs[$n]
  ]
}
' file1.json file2.json
...