使用Python的ujson模块导出非数字浮点数的JSON

7 投票
1 回答
3081 浏览
提问于 2025-04-18 17:27

我正在尝试使用Python3中的ujson模块来序列化数字。有些值是NaN

使用标准的json模块时,一切都正常。

import json
json.dumps(float('NaN'))

结果是:

'NaN'

但是ujson有个问题。

import ujson
ujson.dumps(float('NaN'))

会抛出一个异常:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Invalid Nan value when encoding double

我使用ujson是为了提高性能。我是否需要把结构中所有的NaN替换成字符串'NaN',还是有办法让ujson处理NaN而不抛出异常呢?

我在处理无穷大时也遇到了同样的问题。我找不到相关的文档。

1 个回答

6

根据定义JSON格式的RFC4627文档,在第2.4节关于数字的部分:

那些无法用数字序列表示的数值(比如InfinityNaN)是不被允许的。

所以说,ujson在遵循JSON标准方面比标准库里的json模块更严格。虽然我觉得这个结果有点过于讲究,但ujson的选择是为了符合这个标准。你可以在这里了解更多信息。

看起来,唯一的办法是在提交数据之前进行转换(或者向ujson提交一个请求,让它支持这个功能)。

撰写回答