如何使用jq带条件筛选导出CSV?解决对象无法转CSV报错
报错根因
jq的@csv内置格式化函数,仅支持对数组类型的值完成CSV格式化。原命令在select筛选完成后输出的是单个JSON对象,不符合函数入参要求,因此触发object cannot be csv-formatted, only array报错。
可直接落地的修正命令
基础版(仅输出符合筛选条件的女生记录,无表头)
cat target.json | jq -r '.[] | select(.sex == "female") | [.name, .age, .sex] | @csv'
和原命令相比,核心修正点:
- 新增
-r参数:输出原始字符串,消除jq默认附带的多余转义引号,导出的内容可直接被Excel、WPS等表格软件正常识别 - 对筛选出的JSON对象,通过
[.name, .age, .sex]将字段按目标列顺序封装为数组,满足@csv的入参要求 - 匹配规则将原
endswith("female")替换为== "female":当前源数据中sex为固定枚举值,精确匹配逻辑更简洁;如果后续存在类似"female-少年班"这类需要后缀匹配的场景,可保留原endswith写法。
执行该命令后的输出为:
"Kasia","5","female"
增强版(带CSV表头,可直接落盘导出文件)
如果需要导出的CSV第一行包含列名(name、age、sex),并直接保存为本地文件,可执行以下命令:
cat target.json | jq -r '["name", "age", "sex"], (.[] | select(.sex == "female") | [.name, .age, .sex]) | @csv' > female_records.csv
执行完成后会在当前目录生成female_records.csv文件,文件内容为:
"name","age","sex" "Kasia","5","female"
内容的提问来源于stack exchange,提问作者MKK
相关产品推荐
相关产品推荐

