jq как объединить объекты массива в один объект - PullRequest
2 голосов
/ 29 мая 2020

в jq можно добавлять объекты с помощью оператора +

, если у вас есть массив

 [
      {
        "a": "value"
      },
      {
        "b": "value"
      },
      {
        "c": "value"
      }
 ]

Я хочу преобразовать его в один объект {a: "value", b: "value", c: "value"} Я могу использовать следующий фильтр. [0] +. [1] +. [2], но я хочу сделать это для всего массива без указания всех индексов .

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

Самый простой способ - просто вызвать add filter .

"Фильтр add принимает на вход массив и производит на выходе элементы массива, сложенные вместе. Это может означать суммирование, объединение или объединение в зависимости от типов элементов входного массива - правила такие же, как и для оператора + (описанного выше). "


Источник: https://stedolan.github.io/jq/manual/#add

$ cat test.json 
[ 
    {
        "a": "value"
    },
    {
        "b": "value"
    },
    {
        "c": "value"
    }
 ]

$ jq 'add' test.json
{
  "a": "value",
  "b": "value",
  "c": "value"
}

Как упоминалось пиковое в комментарии , вы даже можете пропустить перенос фильтра add с кавычками:

$ jq add test.json
{
  "a": "value",
  "b": "value",
  "c": "value"
}
3 голосов
/ 29 мая 2020

Вы можете использовать reduce:

reduce .[] as $o ({}; . + $o)

возвращает:

{
  "a": "value",
  "b": "value",
  "c": "value"
}
...