【问题标题】:Parse dynamic array of objects with JQ使用 JQ 解析对象的动态数组
【发布时间】:2021-03-31 15:11:40
【问题描述】:

我正在尝试通过 JQ 展平和重新转换 JSON 有效负载,但到目前为止还没有成功。我有以下有效负载,它具有动态数量的值,具体取决于stats 字段下的每个对象:

{
  "stats": [
    {
      "devid": 3,
      "key": "diskall",
      "value": [
        {
          "0": 0.0001,
          "1": 0.0001,
          "2": 0.0012,
          "3": 0.0005,
          "4": 0.0007,
          "5": 0.0013,
          "6": 0.0006000000000000001,
          "7": 0.0006000000000000001,
          "8": 0.0006000000000000001,
          "9": 0.0006000000000000001,
          "10": 0.0005,
          "11": 0.0005,
          "12": 0.0005
        }
      ]
    },
    {
      "devid": 7,
      "key": "diskall",
      "value": [
        {
          "0": 0.0003,
          "1": 0.0004,
          "2": 0.0012,
          "3": 0.0005,
          "4": 0.0007,
          "5": 0.0013,
          "6": 0.00060001
        }
      ]
    }
  ]
}

我想将值数组对象键/值展平并转换为如下结果(对于每个统计对象中的每个值)。基本上取值中的键并将其放在名为 nodeId 的字段中,然后取值并将其放在名为 value 的字段中

{
"devid": 3
"key": "diskall"
"nodeId": 0
"value": 0.0001
},
{
"devid": 3
"key": "diskall"
"nodeId": 1
"value": 0.0001
},
{
"devid": 3
"key": "diskall"
"nodeId": 2
"value": 0.0012
},
{
"devid": 7
"key": "diskall"
"nodeId": 0
"value": 0.0003
}

我能够像这样使用 jq 进行展平:.stats | map(del(.value) + .value[]),但我不确定如何将值转换为它们自己的对象以及重命名键/值。

【问题讨论】:

    标签: arrays json object jq


    【解决方案1】:
    .stats[]
    | {devid,key} + (.value[] | to_entries[] | {nodeId: .key|tonumber, value})
    

    您可能希望将 tonumber 替换为 (tonumber? // .) 以确保稳健性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多