如何使用JQ根据属性值查找替换JSON数组中的目标元素值
实现方法
不需要依赖数组索引,直接用jq的条件筛选匹配目标元素即可,语法如下:
.configs |= map(select(.configName == "config1") | .configName = "foo")
逻辑说明
|=是更新赋值运算符,会将左侧.configs数组按照右侧逻辑处理后完成值更新map()遍历数组所有元素,不符合筛选条件的元素会原样保留,不会被改动select(.configName == "config1")负责筛选出configName值为config1的目标元素,匹配逻辑和元素位置完全无关- 对筛选出的目标元素执行
.configName = "foo",即可完成属性值修改
如果数组内存在多个configName为config1的项,上述写法会修改所有匹配项;如果确定目标项唯一,该写法不受元素位置变动影响,稳定性远高于按索引取值的写法。
内容的提问来源于stack exchange,提问作者Dutts
相关产品推荐
相关产品推荐

