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

如何用JQ将条目quadrant字段替换为数组对应值的索引?

问题:将JSON中entries的quadrant字段替换为对应索引

原始JSON数据

{"quadrants": ["Languages + Frameworks", "Tools", "Platforms", "Techniques"],"entries": [{"quadrant": "Languages + Frameworks"},{"quadrant": "Platforms"},{"quadrant": "Languages + Frameworks"}]}

需求说明

将entries数组中每个条目的quadrant字段值,替换为该值在顶层quadrants数组中的对应索引,预期输出:

{"quadrants": ["Languages + Frameworks", "Tools", "Platforms", "Techniques"],"entries": [{"quadrant": 0},{"quadrant": 2},{"quadrant": 0}]}

错误的JQ脚本

执行以下脚本后,所有quadrant字段返回null:

jq '
  .entries |= map(
    .quadrant = (.quadrant as $q | (.quadrants | index($q)))
  )
' "$1"

问题根源

在map函数内部,当前上下文是entries数组的单个元素对象,此时.quadrants无法引用顶层的quadrants数组——上下文切换后,当前对象没有quadrants属性,所以index($q)找不到匹配项,返回null。

正确的JQ脚本

先将顶层的quadrants数组存储为变量,再在map中使用该变量进行索引查找:

jq '
  .quadrants as $quads |
  .entries |= map(
    .quadrant = $quads | index(.quadrant)
  )
' "$1"

更简洁的写法(直接遍历entries元素修改):

jq '
  .quadrants as $q | .entries[] |= .quadrant = ($q | index(.quadrant))
' "$1"

验证结果

执行正确脚本后,输出与预期完全一致:

{"quadrants": ["Languages + Frameworks", "Tools", "Platforms", "Techniques"],"entries": [{"quadrant": 0},{"quadrant": 2},{"quadrant": 0}]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:36:15