json.dumps(data, ensure_ascii=False, allow_nan=False)
# 抛出 ValueError 先清洗数据
[None if math.isnan(x) else x for x in row]

json.dump 把统计结果写进文件,NaN 原样落了进去,前端 JSON.parse 报 Unexpected token N。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,Python 的 json 默认允许输出 NaN 和 Infinity,这两个字面量不符合标准规范,常规解析器一律拒绝。

「JSON NaN 输出」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。

处理上按这个顺序:写文件时设 allow_nan 为假,让问题暴露;缺失值在源头就换成 None,别留给编码器;下游统一按 null 做判断,不认字符串。

改完只确认一件事:输出文件里搜不到 NaN 字面量,前端解析和字段校验都通过。

作者 9823189