如何通过Linux命令行交换JSON文件中两个对象的Weight值?
在Linux命令行交换JSON中两个TargetGroup的Weight值
要完成这个需求,最实用的工具是jq——一款专门用于命令行处理JSON的工具。以下是两种针对性的实现方法:
方法一:根据Weight值匹配替换(适配Weight位置不固定的场景)
假设你的JSON文件名为elb-config.json,执行以下命令:jq '.[0].ForwardConfig.TargetGroups |= [(.[] | if .Weight == "100" then .Weight = "0" elif .Weight == "0" then .Weight = "100" else . end)]' elb-config.json > updated-elb-config.json该命令会遍历
TargetGroups数组内的所有对象,将值为"100"的Weight改为"0",值为"0"的改为"100",其余内容保持不变,结果会输出到新文件updated-elb-config.json中。方法二:固定交换数组前两个元素的Weight(适配确定只有两个TargetGroup的场景)
如果明确TargetGroups数组内只有两个对象,可以直接交换它们的Weight值:jq '.[0].ForwardConfig.TargetGroups as $tg | .[0].ForwardConfig.TargetGroups[0].Weight = $tg[1].Weight | .[0].ForwardConfig.TargetGroups[1].Weight = $tg[0].Weight' elb-config.json > updated-elb-config.json这里先将
TargetGroups数组暂存到变量$tg,再分别把两个元素的Weight设置为对方的原始值。直接修改原文件
若你的jq版本为1.6及以上,可使用-i选项直接覆盖原文件,无需输出到新文件:jq -i '.[0].ForwardConfig.TargetGroups as $tg | .[0].ForwardConfig.TargetGroups[0].Weight = $tg[1].Weight | .[0].ForwardConfig.TargetGroups[1].Weight = $tg[0].Weight' elb-config.json
执行命令后,可通过cat updated-elb-config.json(或原文件)查看内容,确认两个Weight值已完成交换,与目标内容一致。
内容的提问来源于stack exchange,提问作者Lagot
相关产品推荐
相关产品推荐

