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

jq命令报错Cannot index number with string "id",如何修正获预期输出?

修正jq命令解决索引错误并获取预期输出

原执行命令

jq '[paths | select(.[-1] == "id") | {"path": ., "value": getpath(.)}]' <(echo '[{ "id": 1, "child": { "id": 2 } }]')

错误提示

jq: error (at /dev/fd/63:1): Cannot index number with string "id"

预期输出

[{"path": [0,"id"], "value": 1}, {"path": [1,"child","id"], "value": 2}]

问题原因

paths会递归遍历JSON的所有层级路径,当遍历到数值类型的节点(比如示例中的1和2)时,仍会尝试继续向下索引,但数值无法用字符串"id"进行索引,因此触发报错。

修正方案

方案一:仅生成指向标量值的路径

使用paths(scalars)替代paths,它只会生成最终指向标量(数值、字符串等)的路径,避免遍历到数值节点后继续尝试索引:

jq '[paths(scalars) | select(.[-1] == "id") | {"path": ., "value": getpath(.)}]' <(echo '[{ "id": 1, "child": { "id": 2 } }]')

方案二:筛选时验证父节点类型

在筛选路径时,先检查当前路径的父节点是对象类型,确保"id"是对象的键而非尝试索引数值:

jq '[paths | select(.[-1] == "id" and (getpath(.[0:-1]) | type == "object")) | {"path": ., "value": getpath(.)}]' <(echo '[{ "id": 1, "child": { "id": 2 } }]')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 17:14:53