在 json 中发送 NaN
Posted
技术标签:
【中文标题】在 json 中发送 NaN【英文标题】:sending NaN in json 【发布时间】:2011-09-29 22:00:49 【问题描述】:我正在尝试使用 json.dumps()
将包含浮点数和 NaN
的数组从 Python 编码为 JSON 字符串。
但是编码的 JSON 字符串在 php 中没有被成功解码。 NaN
是否会导致此问题?我该如何解决这种情况?
【问题讨论】:
输出的 JSON 是什么样子的? NaN 不是 Python 中的原生数据类型,所以我很惊讶它完全可以工作。 @Daniel:实际上,如果你做float("nan")
,你就可以得到它。调用 json.dumps(float("nan"))
会给你“NaN”。
【参考方案1】:
json.dumps
有一个allow_nan
参数,默认为True。
NaN、Infinity 和 -Infinity 不是 JSON 的一部分,但它们在 javascript 中是标准的,因此它们是常用的扩展。如果收件人无法处理,请设置allow_nan=False
。但是当你尝试序列化 NaN 时,你会得到 ValueError。
【讨论】:
【参考方案2】:Python 的标准 json 包所基于的 simplejson 包移动得更快,并且可以处理这种情况。 NaN
不是有效的 JSON,ignore_nan
标志将正确处理所有 NaN
到 null
的转换。
import simplejson as json
json.dumps(thing, ignore_nan=True)
default
参数将允许 simplejson 正确解析您的日期时间。
json.dumps(response, ignore_nan=True, default=datetime.datetime.isoformat)
simplejson 可以用 pip 安装。
pip install simplejson
【讨论】:
【参考方案3】:NaN 不是有效的 JSON 符号,请参阅 http://json.org/ 的规范
您的编码器可能应该将 NaN 编码为 null
。
【讨论】:
你必须解决这个问题,看看手册docs.python.org/library/json.html#basic-usage以上是关于在 json 中发送 NaN的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 3 中使用 Alamofire 制作和发送字典数组(JSON 格式)发送到服务器