使用 jq 对 JSON 进行反规范化

denormalizing JSON with 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 函数,但不太成功。请帮助:)

这应该有效。你不会想在这里使用 group_by,如果你想从多到少,你会这样做,我们正在走另一条路。

您正在将具有相应严重性的不同版本组合在一起。以下是您可以如何做到这一点。

map(.fields | (.versions[] | { id, name }) + { value: .severity.value })