You need to enable JavaScript to run this app. JQ如何通过传入的数组参数匹配Key并批量更新对应Value
优惠活动
大模型
产品
解决方案
定价
更多

JQ如何通过传入的数组参数匹配Key并批量更新对应Value

解决方案

错误原因

  • jq内置的in运算符作用是判断某个键是否存在于对象中,无法直接用于判断元素是否存在于数组,所以你原来的写法逻辑不生效。

实现方法

方法1:使用index()函数(适合标签数量少的场景)

直接用数组的index方法查询当前Key是否在传入的标签列表中:

jq --argjson TAGS '["Tag1","Tag2"]' --arg NEW_VALUE '987-654' \
'[.[] |= if($TAGS | index(.Key)) then (.Value = $NEW_VALUE) else . end]'

说明:index函数会返回元素在数组中的下标,找不到则返回null,if判断会自动把null识别为假值,非空下标识别为真值,刚好匹配需求。

方法2:转查询对象(适合标签数量多的场景)

如果传入的标签列表很长,先把列表转成键为标签名的对象,再用in查询,性能更高:

jq --argjson TAGS '["Tag1","Tag2"]' --arg NEW_VALUE '987-654' \
'($TAGS | reduce .[] as $tag ({}; .[$tag] = true)) as $tag_map
| [.[] |= if(.Key | in($tag_map)) then (.Value = $NEW_VALUE) else . end]'

输出示例

运行后得到的结果如下:

[
  {
    "Key": "IDontCare",
    "Value": "something"
  },
  {
    "Key": "Tag1",
    "Value": "987-654"
  },
  {
    "Key": "Tag2",
    "Value": "987-654"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:51:01