You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq将含数组/对象混合CPU字段的JSON转为指定CSV

解决JSON中CPU字段类型不一致转CSV的问题

问题场景

从XML提取的两段JSON数据中,cpu字段存在类型不一致的情况:一段是数组,一段是对象,需要通过bash结合jq工具将其转换为指定格式的CSV。

输入JSON:

{
  "unit-type": "amp",
  "unit-id": "0",
  "cpu": [
    {
      "cpu-id": "0",
      "temperature": "64(C)"
    },
    {
      "cpu-id": "1",
      "temperature": "64(C)"
    }
  ]
}
{
  "unit-type": "bcp",
  "unit-id": "1",
  "cpu": {
    "cpu-id": "0",
    "temperature": "74(C)"
  }
}

期望CSV输出:

unit-type,unit-id,cpu-id,temperature
amp,0,0,64(C)
amp,0,1,64(C)
bcp,1,0,74(C)

解决方案

核心思路是先将cpu字段统一转换为数组类型,再遍历数组生成CSV行,具体命令如下:

( echo '["unit-type", "unit-id", "cpu-id", "temperature"]'; 
  jq -r '
    # 将cpu字段统一转为数组:对象转单元素数组,数组保持原样
    .cpu |= if type == "object" then [.] else . end
    # 遍历每个cpu元素,组合外层字段与cpu字段
    | .cpu[] as $cpu_item
    | [.unit-type, .unit-id, $cpu_item."cpu-id", $cpu_item.temperature]
  ' input.json ) | jq -r '@csv'

命令说明

  1. 统一CPU字段类型:通过if type == "object" then [.] else . end判断cpu的类型,将对象包装成单元素数组,确保后续遍历逻辑统一。
  2. 组合字段生成数据行:遍历统一后的cpu数组,将每个CPU元素的cpu-id、temperature与外层的unit-type、unit-id组合成JSON数组。
  3. 生成标准CSV:先输出表头的JSON数组,再将所有数据行的数组通过jq -r '@csv'转换为CSV格式,自动处理字段的引号和分隔符。

内容的提问来源于stack exchange,提问作者Benjamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:52:47