用jq反规范化JSON

Som*_*era 1 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"
          }
        }
      }
    ]
Run Code Online (Sandbox Code Playgroud)

我想用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"
      }
    ]
Run Code Online (Sandbox Code Playgroud)

请注意,第一个对象具有2个版本,并且具有相同的严重性。我已经尝试过jq的group_by和map函数,但是还不太成功。请帮忙 :)

Jef*_*ado 5

这应该工作。您不想在group_by这里使用a ,如果您尝试从多变少,则可以这样做,否则我们将走另一条路。

您正在将不同版本与相应的严重性结合在一起。这是您可以执行的操作。

map(.fields | (.versions[] | { id, name }) + { value: .severity.value })
Run Code Online (Sandbox Code Playgroud)