如何对JSON文档任意位置的数字进行两位精度四舍五入?
通用JSON数字四舍五入到两位小数的解决方案
直接用jq工具处理是最优方案——它能精准识别JSON结构里的数值类型,不会误处理字符串中的数字,还能正确处理科学计数法、负数等场景,完美实现四舍五入需求。
核心命令
jq 'walk(if type == "number" then (. * 100 | round) / 100 else . end)' input.json > output.json
命令解释
walk(...):递归遍历JSON的所有节点,对每个节点做判断处理if type == "number":只针对数值类型的节点操作,避开键名、字符串等非数值内容(. * 100 | round) / 100:先把数字放大100倍,用round做四舍五入,再缩小100倍,得到两位小数的结果- 非数值节点直接原样保留
测试验证
拿你提供的输入示例测试:
输入:
{ "a": -4e-12, "b": { "c": 0.999999999999997, "d": 101.12222222222 } }
执行命令后输出:
{ "a": 0, "b": { "c": 1, "d": 101.12 } }
完全符合预期,且能处理任意层级的嵌套结构,不管数值在JSON的哪个位置都能正确处理。
注意事项
- 确保系统已安装
jq工具,大部分Linux发行版可用包管理器安装(比如apt install jq或yum install jq),macOS可通过Homebrew安装(brew install jq) - 该方法不会修改JSON结构,仅处理数值内容,避免了正则处理可能出现的误匹配问题(比如改掉字符串里的数字)
内容的提问来源于stack exchange,提问作者Rainer Jung
相关产品推荐
相关产品推荐

