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

如何用jq访问含特殊字符的字段(对象/数组)并判断非空term

解决JSON转CSV的非空字段检查需求

没问题,我来帮你搞定这个用jq处理JSON并生成CSV的需求!针对你提到的Production可能是对象或数组、creator.role带特殊字符的情况,这里有个直接能用的解决方案:

核心jq命令

直接运行这条命令就能生成你要的CSV文件:

jq -r '.[].recordList.record[] | 
  .Production | 
  if type == "array" then . else [.] end | 
  any(."creator.role"?; .?.term != "") | 
  if . then 1 else 0 end' file.json > result.csv

命令逻辑拆解

咱们一步步看每个部分是干啥的:

  • .[].recordList.record[]:先定位到JSON里的每条record数据,遍历所有记录
  • .Production | if type == "array" then . else [.] end:把Production统一转成数组格式——不管它原本是单个对象还是多个对象的数组,这样后面就能用统一的逻辑处理
  • any(."creator.role"?; .?.term != ""):检查数组里是否存在至少一个满足条件的项:
    • ."creator.role"?:用引号包裹带点的字段名,同时加?避免字段不存在时报错
    • .?term != "":确保term字段存在且不是空字符串
  • if . then 1 else 0 end:把jq返回的布尔值(true/false)转换成你要的1和0
  • -r参数:让jq输出纯文本(不带引号),符合CSV的格式要求

示例验证

用你给出的示例JSON数据运行这条命令,会输出4行结果:

1
0
0
1

对应每条record的检查结果:

  1. 第一条有非空的term:A → 1
  2. 第二条没有creator.role字段 → 0
  3. 第三条term是空字符串 → 0
  4. 第四条数组里有term:B → 1

可选:添加CSV表头

如果需要给CSV加表头,先执行echo命令再追加结果:

echo "has_non_empty_creator_role" > result.csv && jq -r '.[].recordList.record[] | 
  .Production | 
  if type == "array" then . else [.] end | 
  any(."creator.role"?; .?.term != "") | 
  if . then 1 else 0 end' file.json >> result.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:23:00