jq getpath错误:不能用字符串“id”对数字进行索引
有什么问题:
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 | ... 之后让 getpath(.) 发生,因为 paths 将路径分配给 .(用来替代原始JSON数据),而 getpath() 无法访问原始JSON数据,却在该路径中进行搜索。
但如果你把路径分配给变量(例如 $p),那么它仍然可以访问原始JSON数据。
jq '[paths as $p | select($p[-1] == "id") | {"path": $p, "value": getpath($p)}]' <(echo '[{ "id": 1, "child": { "id": 2 } }]')
还有一个小问题。
对于你的嵌套数据 '[{"id":1,"child":{"id":2}}]'),它给出:
[{"path":[0,"id"],"value":1}, {"path":[0,"child","id"],"value":2}]
在第二个 {"path":[0, ... 中,显示为 0,而不是 1。
如果你有一个包含两个值的列表 '[{"id":1}, {"child":{"id":2}}]',那么它会给出期望的 1。
[{"path":[0,"id"],"value":1}, {"path":[1,"child","id"],"value":2}]
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。