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

如何通过命令行将嵌套JSON解析为CSV文件

解析嵌套JSON为包含展开动态字段的CSV

示例JSON数据

{"tables":[{"name":"PrimaryResult","columns":[{"name":"name","type":"string"},{"name":"id","type":"string"},{"name":"custom","type":"dynamic"}],"rows":[["Alpha","1","{\"age\":\"23\",\"number\":\"xyz\"}"]]}]}

期望CSV输出

name,id,age,number
Alpha,1,23,xyz

尝试的命令及问题

执行了以下两条jq命令:

jq -r ".tables | .[] | .columns | map(.name)|@csv" demo.json > demo.csv
jq -r ".tables | .[] | .rows |.[]|@csv" demo.json >> demo.csv

实际输出未展开custom字段,不符合预期:

name,id,custom
Alpha,1,"{""age"":""23"",""number"":""xyz""}"

正确解决方案

使用以下单条jq命令即可完成需求:

jq -r '
.tables[] |
# 提取基础字段名,排除custom
( .columns | map(.name) | select(. != "custom") ) as $base_cols |
# 解析custom字段的结构,提取其键作为额外列名
( .rows[0][2] | fromjson | keys ) as $custom_cols |
# 合并列名并输出
$base_cols + $custom_cols | @csv,
# 处理每一行:展开custom字段并合并数据
.rows[] | .[0,1] + (.[2] | fromjson | [.age, .number]) | @csv
' demo.json > demo.csv

命令说明

  • .tables[]:遍历tables数组中的目标表元素
  • $base_cols:提取custom以外的基础列名(name、id)
  • $custom_cols:解析首行的custom字符串为JSON,动态获取其键作为新增列名
  • 先输出合并后的完整列名行,再逐行处理数据:取前两个基础字段,解析custom并提取对应值,合并后转为CSV格式

如果custom字段的结构固定(始终包含age和number),可简化命令:

jq -r '
.tables[] |
["name","id","age","number"] | @csv,
.rows[] | .[0,1] + (.[2] | fromjson | [.age, .number]) | @csv
' demo.json > demo.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:41:31