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

使用jq处理API返回的JSON对象/数组,生成CSV时规避空值

jq处理动态JSON(对象/数组/Null)转CSV方案

1. 统一不确定字段的类型

API返回的字段可能是单个对象、数组或null,直接迭代会报错,先把它们统一转成数组:

  • 用// []把null转成空数组
  • 用if type == "object" then [.] else . end把单个对象包装成单元素数组

比如处理software.name字段:

.software // {} | .name // [] | if type == "object" then [.] else . end

2. 遍历数组并替换空值

统一成数组后,遍历每个元素,把所有null字段替换成空字符串:

.software // {} | .name // [] | if type == "object" then [.] else . end | map({
  name: .value // "",
  version: .version // ""
})

3. 输出标准CSV格式

结合jq的@csv过滤器,先定义表头,再拼接数据行,确保空值正确显示:
完整命令示例:

jq -r '
# 统一处理软件名称为数组
.software // {} | .name // [] | if type == "object" then [.] else . end 
# 映射为CSV需要的列,空值替换为""
| map([
    .value // "",
    .version // "",
    (.extra_info // "")
  ])
# 添表头后转CSV
| ["软件名称", "版本", "额外信息"], .[] | @csv
' api_response.json

4. 全局批量替换空值

如果要一次性把所有null转成空字符串,可以用walk递归处理:

jq -r '
# 全局替换所有null为空字符串
walk(if type == "null" then "" else . end)
# 统一字段类型
| .software // {} | .name // [] | if type == "object" then [.] else . end 
# 生成CSV行
| map([.value, .version, .extra_info])
| ["软件名称", "版本", "额外信息"], .[] | @csv
' api_response.json

关键错误规避点

  • //是jq的默认值操作符,左边不存在或为null时自动用右边值兜底
  • 统一转数组后,哪怕是空数组,map也不会抛出"Cannot iterate over null"错误
  • walk递归处理所有层级的null,避免后续字段访问时出问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:48:26