Ubuntu 22.04下jq 1.6转换大JSON到CSV报错求助
问题
- 环境:Ubuntu 22.04.2 LTS,jq版本jq-1.6
- 需求:将大体积JSON文件转换为指定格式的CSV
- JSON示例:
{"_id":{"$oid":"5200a366e36f237975000783"},"derived_form":{"$numberInt":"1"},"intransitive":true,"lemma":"badbad","phonetic":"bɐdbɐt","pos":"VERB","root":{"radicals":"b-d-b-d"},"sources":["Spagnol2011","Falzon2013"],"glosses":[{"gloss":"to fornicate","examples":[]},{"gloss":"to cough a lot","examples":[]}],"norm_freq":{"$numberDouble":"0.0"}}
- 目标CSV格式:
5200a366e36f237975000783, badbad, bɐdbɐt, VERB, true, b-d-b-d, "to fornicate, to cough a lot"
- 报错命令:
jq '.lemma, .phonetic, .pos, .intransitive, .root.radicals, .glosses.[].gloss'
该命令在jqplay.org可正常运行,但本地Ubuntu环境执行报错。
解决方法
- 修正语法错误:原命令中
.glosses.[].gloss的写法不符合jq 1.6的语法规范,多余的点会导致解析错误,需改为.glosses[].gloss。 - 生成合规CSV格式:要输出目标格式的CSV,需要将所有字段整合为数组,再用
@csv处理格式转义,同时覆盖所有需求字段:- 提取
_id.$oid作为首字段 - 将
glosses中的所有gloss值拼接为单个字符串,避免多字段拆分 - 用
@csv自动处理含逗号字符串的引号包裹
- 提取
正确命令如下:
jq -r '[._id.$oid, .lemma, .phonetic, .pos, .intransitive, .root.radicals, (.glosses[].gloss | join(", "))] | @csv' input.json
参数说明:
-r:输出原始字符串,避免默认的引号包裹[]:将目标字段组合为数组,确保一行输出所有内容join(", "):拼接多个gloss值为单个字符串@csv:自动处理CSV格式的转义逻辑,保证格式合法
内容的提问来源于stack exchange,提问作者faszikam
相关产品推荐
相关产品推荐

