使用JQ修改JSON:指定address的origin设weight为0并精简输出
正确JQ命令实现需求
最终命令
{name, origins: .origins | map(if .address == "1.1.1.1" then .weight = 0 else . end)}
命令说明
- 构造目标输出结构:直接声明只保留顶层的
name字段,以及处理后的origins字段,过滤掉其他无关顶层字段。 - 处理origins数组:
- 用
map遍历origins数组的每个元素 - 对每个元素判断:如果
address等于"1.1.1.1",就将其weight设为0;否则保持原元素不变。
- 用
原命令问题分析
你之前的命令(.[].origins[] | select(.address == "1.1.1.1") | .weight ) |= 0有两个问题:
- 没有做顶层字段筛选,输出会包含原JSON的所有顶层字段,不符合“仅保留name和origins”的要求
- 如果你的顶层JSON是单个对象而非数组,
.[].origins[]的写法会出错,应该直接用.origins定位数组
示例验证
输入JSON
{ "name": "test-group", "origins": [ {"address": "1.1.1.1", "weight": 10}, {"address": "2.2.2.2", "weight": 20}, {"address": "1.1.1.1", "weight": 15} ], "extra-field": "should-be-removed" }
执行命令后输出
{ "name": "test-group", "origins": [ {"address": "1.1.1.1", "weight": 0}, {"address": "2.2.2.2", "weight": 20}, {"address": "1.1.1.1", "weight": 0} ] }
内容的提问来源于stack exchange,提问作者ARuksau
相关产品推荐
相关产品推荐

