Объединение связанных данных с JQ - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь собрать массив раз из набора данных JSON и надеялся сделать это с помощью jq без необходимости писать код на другом языке для обработки.

Данные

[
    {
        "id": "abc",
        "time": 34
    },
    {
        "id": "def",
        "time": 25
    },
    {
        "id": "abc",
        "time": 45
    }
]

Я хотел бы получить вывод в формате

{
    "abc": [ 34, 45 ],
    "def": [ 25 ]
}

Ответы [ 3 ]

2 голосов
/ 19 марта 2019

Вот один из способов сделать это.

jq 'reduce .[] as $i ({}; .[$i.id] += ($i|[.time]))'
1 голос
/ 19 марта 2019

Функциональный (reduce -без) подход, использующий только встроенные jq:

group_by(.id)
| map( {(.[0]|.id): (map([.time]) | add)} )
0 голосов
/ 20 марта 2019

, если хотите, вот альтернативное решение, основанное на jtc утилита unix:

bash $ echo {} | jtc -i file.json -mi'<id>l:<K>v[-1][time]<V>v' -T'{ "{K}":{V} }'

{
   "abc": [
      34,
      45
   ],
   "def": 25
}
bash $ 
...