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

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环境执行报错。

解决方法
  1. 修正语法错误:原命令中.glosses.[].gloss的写法不符合jq 1.6的语法规范,多余的点会导致解析错误,需改为.glosses[].gloss。
  2. 生成合规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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:38:16