如何基于条件修改jq数组值?将sitem最大值项的status改为100
解决方法:修改sitem值最大项的status字段
完整jq命令
jq ' .[] | [.main[] | {drink,sitem}] | map( .sindex = (1 + index | tostring) ) | map( .status = "10" ) | (map(.sitem | tonumber) | max) as $max_sitem | map( if .sitem | tonumber == $max_sitem then .status = "100" else . end ) '
命令说明
- 基础数据处理:从原始JSON中提取
main数组元素,生成包含drink、sitem的对象;为每个元素添加从1开始的字符串类型序号sindex;给所有元素设置初始status为"10"。 - 定位最大sitem值:将所有元素的
sitem转换为数字后,提取最大值并保存为变量$max_sitem。 - 修改目标字段:遍历数组,判断每个元素的
sitem(转数字后)是否等于$max_sitem,匹配项的status改为"100",其余项保持原样。
执行结果
输入原始JSON后,执行上述命令将输出期望结果:
[ { "drink": "cola", "sitem": "10", "sindex": "1", "status": "10" }, { "drink": "pepsi", "sitem": "20", "sindex": "2", "status": "100" } ]
内容的提问来源于stack exchange,提问作者shepi
相关产品推荐
相关产品推荐

