Python JSON导出:拒绝NaN与Infinity

Python的json模块默认可以输出NaN或Infinity,但这些并不是标准JSON数值。文件在本机能生成,不代表其他语言或严格接口一定能接受。

浅色数据表格与结构化卡片
浅色主题概念配图,选自本站AI生成图库;非事件现场或产品实测截图。

导出前明确特殊值策略

使用allow_nan=False时,遇到非有限浮点数会抛出ValueError。这样可以在数据离开程序之前发现问题,而不是等对方解析失败。若业务允许缺失值,应先明确转换为null的规则;不能偷偷把异常值改成零。

输入与输出分别控制

allow_nan控制序列化行为,不会自动约束读取过程。读取非标准NaN等常量可结合parse_constant制定拒绝策略。普通数字在转换后也可能超出业务范围,因此语法合法仍不等于数据满足要求。

用有限值与异常值对照

下面检查正常小数能够导出,NaN和正负无穷都会被拒绝。这个检查只覆盖非有限浮点数,不处理业务字段完整性或重复键;这些属于另外的校验层。示例在隔离环境运行,不读取真实数据文件。

可以运行的练习

import json
assert json.loads(json.dumps({"value": 1.25}, allow_nan=False)) == {"value": 1.25}
for value in [float("nan"), float("inf"), float("-inf")]:
    try:
        json.dumps({"value": value}, allow_nan=False)
    except ValueError:
        pass
    else:
        raise AssertionError("非有限数值没有被拒绝")
print("有限值通过,三种非有限值被拒绝")

示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。

资料与继续学习

Python:JSON的NaN与Infinity处理。资料查阅日期:2026年10月5日。步骤与练习由本站整理。

资料查阅与编辑日期:2026年10月5日。作者:玖柒。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享