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

JQ报错Cannot iterate over null:动态JSON字段映射问题排查

解决JQ字段映射时的"Cannot iterate over null"错误

报错原因

你的JQ脚本报错是因为inputArray中存在null元素,或者在按schema映射字段时,试图访问null对象的属性。即便schema本身存在,数组里的null项会打断遍历流程;直接给数组加?会导致整个数组被当成可选值,一旦遇到null就直接返回空,而非处理有效数据。

解决方案

分两步处理,既过滤无效的null元素,又安全处理字段映射:

  1. 过滤数组内的null元素
    先用map(select(. != null))剔除inputArray中的null项,确保后续遍历的都是有效对象。

  2. 安全映射字段
    将schema转为键值对数组后遍历,用//为缺失的原字段设置默认值(比如null),避免访问null属性报错。

示例代码

假设你的输入JSON(/tmp/data.json)结构如下:

{
  "inputArray": [
    {"oldField1": "val1", "oldField2": "val2"},
    null,
    {"oldField1": "val3"}
  ],
  "schema": {
    "newFieldA": "oldField1",
    "newFieldB": "oldField2"
  }
}

修正后的JQ执行命令:

jq --argjson schema "$(jq '.schema' /tmp/data.json)" '
.inputArray
| map(select(. != null))
| map(
    reduce ($schema | to_entries[]) as {$key, $value}; ({}; .[$key] = .[$value] // null)
  )
' /tmp/data.json

执行结果

[
  {
    "newFieldA": "val1",
    "newFieldB": "val2"
  },
  {
    "newFieldA": "val3",
    "newFieldB": null
  }
]

如果你的schema是内嵌在输入JSON里的,也可以简化脚本:

.inputArray
| map(select(. != null))
| map(
    reduce (.schema | to_entries[]) as {$key, $value}; ({}; .[$key] = .[$value] // null)
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:45:58