JSON 转储非数字浮点数与 Python 的 ujson 模块
Posted
技术标签:
【中文标题】JSON 转储非数字浮点数与 Python 的 ujson 模块【英文标题】:JSON dump non-numeric floats with Python's ujson module 【发布时间】:2014-10-09 15:52:20 【问题描述】:我正在尝试使用 Python3 中的 ujson
模块对数字进行序列化。其中一些值为NaN
s。
使用标准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
s?
我对无穷大也有同样的问题。我找不到任何相关文档。
【问题讨论】:
参见例如github.com/esnme/ultrajson/issues/80;这实际上与 JSON 规范更一致。 【参考方案1】:根据定义JSON格式的RFC4627,在2.4节中关于数字:
不允许使用不能表示为数字序列的数值(例如 Infinity 和 NaN)。
所以ujson
比标准库中的json
模块更符合JSON 标准。在我看来,这个结果不必要地迂腐,但选择ujson
是为了符合这个标准。你可以阅读更多关于这个here的信息。
看来唯一的办法就是转换之前的数据(或者提交pull request到ujson
启用)。
【讨论】:
以上是关于JSON 转储非数字浮点数与 Python 的 ujson 模块的主要内容,如果未能解决你的问题,请参考以下文章