用jq对JSON进行非规范化

时间:2015-10-15 12:26:27

标签: 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"
      }
    ]

请注意,第一个对象有两个版本,严重程度相同。我尝试了jq的group_by和map函数,但还没有太成功。请帮助:)

1 个答案:

答案 0 :(得分:4)

这应该有效。你不想在这里使用group_by,如果你试图从更多变为更少,你就会这样做,我们会走另一条路。

您将不同版本与相应的严重性组合在一起。这是你怎么做到的。

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