簡體   English   中英

使用 JQ 將 JSON 展平/合並為單個對象數組

[英]Flatten/merge JSON into single array of objects with JQ

我正在嘗試將父 json object 中的嵌套對象數組合並到帶有jq的單個對象數組中。 基本上我想將對象的每個value數組合並到data數組下方的單個values數組中。

示例輸入:

{
  "data": [
    {
      "id": 1,
      "error": "error1",
      "key": "key1",
      "value": [
        {
          "class_name": "namespace_read",
          "in_max": 148,
          "in_min": 112,
          "in_rate": 359750.71875
        },
        {
          "class_name": "namespace_write",
          "in_max": 184,
          "in_min": 152,
          "in_rate": 656.1185913085938
        },
        {
          "class_name": "namespace_test",
          "in_max": 152,
          "in_min": 152,
          "in_rate": 29.93098068237305
        }
      ]
    },
    {
      "id": 2,
      "error": "error2",
      "key": "key2",
      "value": [
        {
          "class_name": "namespace_read",
          "in_max": 156,
          "in_min": 112,
          "in_rate": 459885.03125
        },
        {
          "class_name": "namespace_write",
          "in_max": 176,
          "in_min": 152,
          "in_rate": 8970.888671875
        },
        {
          "class_name": "namespace_test",
          "in_max": 152,
          "in_min": 152,
          "in_rate": 262.3605346679688
        }
      ]
    }
  ]
}

所需的 Output:

{
  "data": [
    {
      "values": [
        {
          "id": 1,
          "error": "error1",
          "key": "key1",
          "class_name": "namespace_read",
          "in_max": 148,
          "in_min": 112,
          "in_rate": 359750.71875
        },
        {
          "id": 1,
          "error": "error1",
          "key": "key1",
          "class_name": "namespace_write",
          "in_max": 184,
          "in_min": 152,
          "in_rate": 656.1185913085938
        },
        {
          "id": 1,
          "error": "error1",
          "key": "key1",
          "class_name": "namespace_test",
          "in_max": 152,
          "in_min": 152,
          "in_rate": 29.93098068237305
        },
        {
          "id": 2,
          "error": "error2",
          "key": "key2",
          "class_name": "namespace_read",
          "in_max": 156,
          "in_min": 112,
          "in_rate": 459885.03125
        },
        {
          "id": 2,
          "error": "error2",
          "key": "key2",
          "class_name": "namespace_write",
          "in_max": 176,
          "in_min": 152,
          "in_rate": 8970.888671875
        },
        {
          "id": 2,
          "error": "error2",
          "key": "key2",
          "class_name": "namespace_test",
          "in_max": 152,
          "in_min": 152,
          "in_rate": 262.3605346679688
        }
      ]
    }
  ]
}

我正在嘗試使用 jq 進行類似下面的操作,但我正在嘗試找到一種更具可擴展性的方法來制作 output:

{ "id": .data[].id, "error": .data[].error, "key": .data[].key, "className": .data[].value[].class_name, "inMax": .data[].value[].in_max }

扁平化可以通過這里的慣用表達式del(A) + A[]來完成,剩下的就是構建周圍的結構,這是微不足道的。

.data |= [{values: map(del(.value) + .value[])}]

在線演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM