JQ: объединение данных в дерево - PullRequest
0 голосов
/ 06 сентября 2018

Мои данные состоят из categories, содержащего elements. Выраженные в формате .csv, данные о категории повторяются с каждым элементом. Я хочу избежать этого, храня данные в формате дерева .json.

Как мне объединить этот массив elements

[
  {
    "category": "a",
    "comment": "the repetition, oh my",
    "element_foo": 1,
    "element_bar": 10
  },
  {
    "category": "a",
    "comment": "the repetition, oh my",
    "element_foo": 2,
    "element_bar": 20
  }
],

… в этот массив categories, содержащий массивы elements?

[
  {
    "category": "a",
    "comment": "the repetition, oh my",
    "elements": [
      {
        "foo": 1,
        "bar": 10
      },
      {
        "foo": 2,
        "bar": 20
      }
    ]
  }
]

Я надеюсь, что jq сделать это довольно тривиально - иначе я напишу что-то более тяжелое.

1 Ответ

0 голосов
/ 06 сентября 2018

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

group_by({ category, comment }) | map({
    category: .[0].category,
    comment: .[0].comment,
    elements: map({
        foo: .element_foo,
        bar: .element_bar
    })
})
...