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

使用jq处理多类型字段:判断JSON记录是否存在creator

处理JSON中Production字段(对象/数组)并判断Creator存在性

我帮你搞定这个问题!你的核心痛点是Production字段既可能是单个对象,也可能是对象数组,还可能是空对象,需要统一处理后判断是否存在至少一个creator。

完整的jq解决方案

直接用下面的命令就能满足需求,它会统一处理Production的两种结构,输出每个record对应的1(存在creator)或0(不存在):

jq -r '.[].recordList.record[] | 
  # 把Production统一转为数组:如果是对象就包装成数组,数组直接保留
  ( .Production | if type == "array" then . else [.] end ) as $prods |
  # 检查数组中是否有任意一个元素存在creator.name
  if any($prods[]; .creator.name) then 1 else 0 end' input.json > output.csv

逐行解释逻辑

  1. 遍历所有record:.[].recordList.record[] 会深入JSON结构,逐个取出每个record条目。
  2. 统一Production结构:( .Production | if type == "array" then . else [.] end ) 是关键——不管Production原本是单个对象还是数组,都转成数组格式,这样后续处理逻辑就一致了。
  3. 判断creator存在性:any($prods[]; .creator.name) 使用jq的any()函数,只要数组里有一个元素的creator.name存在(非空/非null),就返回true,对应输出1;否则输出0。

测试你的示例JSON

用你给出的示例JSON输入:

[{ "recordList" : { "record" : [{ "Production" : { "creator" : { "name" : "A" } } }, { "Production" : {} }, { "Production" : [{ "creator" : { "name" : "B" }, "creator" : { "name" : "C" } }] }] } }]

执行命令后,输出的CSV内容会是:

1
0
1

完全符合预期:第一个record有creator,第二个没有,第三个数组里有creator。

额外优化点

如果你的JSON里可能存在Production为null的情况,可以在统一数组时加上空值处理:

jq -r '.[].recordList.record[] | 
  ( .Production // [] | if type == "array" then . else [.] end ) as $prods |
  if any($prods[]; .creator.name) then 1 else 0 end' input.json > output.csv

这里// []会把null或不存在的Production转为空数组,避免报错。

内容的提问来源于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 11:40:25