JQ:按值筛选JSON子数组后按索引更新元素的实现方法
jq修改嵌套数组指定值实现方案
你原有筛选逻辑存在两个问题:
select(.[]=="brian")会匹配任意位置包含"brian"的子数组,没有严格校验索引0位置的值- 单独执行筛选会直接过滤掉非匹配项,无法保留完整原数组结构
直接使用jq的条件赋值逻辑即可一次性完成匹配、修改、返回完整数组的需求,不需要提前拆分筛选步骤:
完整命令
# 格式化输出 jq 'map(if .[0] == "brian" then .[2] = "cats" else . end)' 你的json文件路径
如果需要输出紧凑单行格式,加上-c参数即可,注意不要加-r参数(该参数会剥离JSON格式引号,破坏输出结构):
# 紧凑单行输出 jq -c 'map(if .[0] == "brian" then .[2] = "cats" else . end)' 你的json文件路径
执行结果
执行后输出的修改后JSON内容如下:
[ [ "dave", "likes", "rabbits" ], [ "brian", "likes", "cats" ] ]
逻辑说明
map()会遍历最外层数组的每一个子数组元素.[0] == "brian"严格判断当前子数组索引0位置的值是否为目标值- 匹配成功的子数组直接对索引2位置赋值
"cats",非匹配子数组保持原值返回 - 最终返回修改完成的完整外层数组,不会丢失其他非目标项
内容的提问来源于stack exchange,提问作者phil
相关产品推荐
相关产品推荐

