如何使用jq对JSON中资源的monthlyCost求和并更新总费用字段
jq更新totalMonthlyCost字段解决方案
你可以直接使用以下jq命令完成需求:
jq '.breakdown |= (.totalMonthlyCost = (.resources | map(.monthlyCost) | add))' 输入文件.json
命令逻辑说明
.breakdown |= (...)表示原地修改JSON中的breakdown对象,不会改动其他层级的字段内容- 赋值逻辑部分:先提取
breakdown.resources数组中所有元素的monthlyCost数值,通过add函数求和后,直接赋值给breakdown.totalMonthlyCost字段 - 你提供的样例执行后,
totalMonthlyCost会被替换为求和结果93.6921
持久化修改到原文件的方法
如果需要直接把修改结果写入原文件,不要直接使用重定向(会清空原文件),推荐使用moreutils工具包中的sponge:
# 先安装moreutils(以Debian/Ubuntu为例) sudo apt install moreutils # 执行修改并写入原文件 jq '.breakdown |= (.totalMonthlyCost = (.resources | map(.monthlyCost) | add))' 输入文件.json | sponge 输入文件.json
可选:保持totalMonthlyCost为字符串类型
如果你需要和原有字段类型保持一致(原来为字符串格式),可以在求和后增加tostring转换:
jq '.breakdown |= (.totalMonthlyCost = (.resources | map(.monthlyCost) | add | tostring))' 输入文件.json
内容的提问来源于stack exchange,提问作者bsivaram
相关产品推荐
相关产品推荐

