如何用jq将JSON对象数组转换为带表头的CSV文件
用JQ将JSON转换为带表头且支持字段缺失补全的标准CSV
你之前的命令只处理了数据行,没生成表头,也没处理字段缺失的场景。下面是能满足需求的完整JQ命令:
jq -r ' (map(keys) | add | unique) as $headers | $headers | @csv , (.[] | [ $headers[] as $h | .[$h] // null ] | @csv) ' testJson.json
命令说明:
- 生成完整表头:
(map(keys) | add | unique)会遍历所有JSON对象的键,合并后去重,得到所有可能的字段列表——哪怕部分对象缺失字段,表头也能包含全部列。 - 输出表头行:
$headers | @csv将表头数组转换为符合标准的CSV格式,自动给字符串字段添加引号。 - 处理数据行并补全缺失字段:
- 对每个JSON对象,按表头的顺序提取对应字段的值
// null表示如果字段不存在,就用null填充,确保每行的列数和表头一致@csv自动处理数据的格式:字符串加引号、数字保持原样,避免手动拼接的格式问题
效果验证
用你提供的示例JSON运行该命令,会直接输出你期望的CSV结果:
"endpoint","date","upUsage","downUsage","upAvgRate","downAvgRate","upMaxRate","downMaxRate" "APPLE","2022-11-02 12:00",0,18000,0,600,0,800 "BANANA","2022-11-02 12:00",0,17600,0,587,0,693 "CARROT","2022-11-02 12:00",0,8000,0,533,0,533
如果遇到字段缺失的对象(比如某条数据没有downMaxRate),对应位置会自动填充null,保持CSV列数一致。
内容的提问来源于stack exchange,提问作者Drew
相关产品推荐
相关产品推荐

