JSON使用Python的ujson模块转储非数字浮点数

时间:2014-08-15 21:22:17

标签: python json nan dump infinity

我尝试使用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而不抛出异常?

我对无穷大也有同样的问题。我无法找到任何相关的文档。

1 个答案:

答案 0 :(得分:6)

根据定义JSON格式的RFC4627,在 2.4 部分中关于数字:

  

不允许将数字值表示为数字序列(例如 Infinity NaN )。

所以ujson更符合JSON标准,然后是标准库中的json模块。根据我的说法,这个结果不必要地迂腐,但ujson的选择是符合这个标准。您可以阅读有关此here的更多信息。

似乎唯一的方法是在之前转换数据(或向ujson提交拉取请求以启用它)。