денормализация JSON с помощью jq

У меня есть JSON, который выглядит так:

    [
      {
        "fields": {
          "versions": [
            {
              "id": "36143",
              "name": "ST card"
            },
            {
              "id": "36144",
              "description": "Acceptance test card",
              "name": "AT card"
            }
          ],
          "severity": {
            "value": "B-Serious",
            "id": "14231"
          }
        }
      },
      {
        "fields": {
          "versions": [
            {
              "id": "36145",
              "name": "ST card"
            }
          ],
          "severity": {
            "value": "C-Limited",
            "id": "14235"
          }
        }
      }
    ]

Я хочу преобразовать его с помощью jq в это:

    [
      {
        "id": "36143",
        "name": "ST card"
        "value": "B-Serious"
      },
      {
        "id": "36144",
        "name": "AT card"
        "value": "B-Serious"
      },
      {
        "id": "36145",
        "name": "ST card"
        "value": "C-Limited"
      }
    ]

Обратите внимание, что первый объект имеет 2 версии и одинаковую серьезность. Я пробовал функции jq group_by и map, но не слишком успешно. Пожалуйста помоги :)


person Somaiah Kumbera    schedule 15.10.2015    source источник


Ответы (1)


Это должно работать. Вы бы не хотели использовать здесь group_by, вы бы сделали это, если бы пытались перейти от большего к меньшему, мы идем другим путем.

Вы комбинируете разные версии с соответствующей серьезностью. Вот как вы могли бы это сделать.

map(.fields | (.versions[] | { id, name }) + { value: .severity.value })
person Jeff Mercado    schedule 15.10.2015
comment
Красивое элегантное решение. Спасибо за быстрый ответ - person Somaiah Kumbera; 16.10.2015