2011-07-06 28 views
36

我正在尝试使用json.dumps()将包含浮动数组和NaN的数组编码为Python中的JSON字符串。在json中发送NaN

但编码的JSON字符串未在PHP中成功解码。 NaN是否会导致此问题?我该如何解决这种情况?

+0

输出的JSON是什么样的? NaN不是Python中的本地数据类型,所以我很惊讶它可以工作。 –

+4

@丹尼尔:其实,如果你做'浮动(“南”)',你可以得到它。并调用'json.dumps(float(“nan”))'给你“NaN”。 –

回答

29

json.dumps有一个allow_nan参数,默认为True。

NaN,Infinity和-Infinity不是JSON的一部分,但它们在Javascript中是标准的,所以它们是常用的扩展。如果收件人无法处理它们,请设置allow_nan=False。但是当你尝试序列化NaN时,你会得到ValueError。

11

楠不是一个有效的JSON符号,请参阅该规范在http://json.org/

您的编码应该可能已经在编码为NaN null代替。

+0

json编码的字符串只包含nan只有 – shreyas

+0

您必须解决该问题,请参阅手册http://docs.python.org/library/json.html#basic-usage – Soren

8

尝试使用simplejson:

pip install simplejson 

然后在代码:

import simplejson 

response = df.to_dict('records') 
simplejson.dumps(response, ignore_nan=True,default=datetime.datetime.isoformat) 

的ignore_nan标志将正确处理所有NaN - >空的转换

默认的标志将允许simplejson正确解析日期。