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

JQ的-c/--compact-output参数失效?JSON转CSV解析需求

用JQ快速将JSON转换为标准CSV格式

嘿,刚接触jq一小时就敢啃超大型数据库的活儿,够拼的!别着急,我给你几个能直接解决问题的命令,分情况给你说:

情况1:你的JSON是顶级对象数组(最常见的结构)

比如你的file2.json长这样:

[
  {"id": 1, "name": "Alice", "email": "alice@example.com"},
  {"id": 2, "name": "Bob", "email": "bob@example.com"}
]

直接用这条命令生成带表头的标准CSV:

jq -r '(.[0] | keys) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' file2.json > output.csv

命令解释:

  • -r:让jq输出原始字符串(不会给每个字段额外加冗余引号)
  • (.[0] | keys):提取第一个对象的所有键作为CSV的表头
  • $keys:先输出表头行
  • map([.[ $keys[] ]]):遍历每个对象,严格按表头的顺序提取对应的值,组成数组
  • @csv:把数组转换成符合RFC标准的CSV格式(自动处理逗号、引号等特殊字符的转义,避免格式混乱)

情况2:JSON里的数组是嵌套在某个字段下的

比如你的JSON结构是:

{
  "total": 2,
  "records": [
    {"id": 1, "name": "Alice"},
    {"id": 2, "name": "Bob"}
  ]
}

只需要先定位到数组字段,修改命令即可:

jq -r '.records | (.[0] | keys) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' file2.json > output.csv

情况3:想要自定义分隔符的类CSV格式(比如制表符分隔)

如果不需要严格的标准CSV,只是要类似CSV的结构化文本,可以用@tsv生成制表符分隔的格式:

jq -r '(.[0] | keys) as $keys | $keys, map([.[ $keys[] ]])[] | @tsv' file2.json > output.tsv

或者自己指定分隔符(比如用分号):

jq -r '(.[0] | keys) as $keys | $keys | join(";"), (map([.[ $keys[] ]] | join(";")))[]' file2.json > output.txt

⚠️ 注意:这种自定义分隔符的方式不会自动处理特殊字符转义,如果字段里有你用的分隔符,会导致格式混乱,所以优先推荐标准CSV的命令。

另外,处理超大型JSON时,jq本身是流式处理的,只要你的内存不是特别紧张,一般都能顺利处理,不用太担心性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:24:16