在 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 标志将正确处理所有 NaNnull 的转换。

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的主要内容,如果未能解决你的问题,请参考以下文章

如何以json的格式发送到前端

如何在 swift 3 中使用 Alamofire 制作和发送字典数组(JSON 格式)发送到服务器

如何在单元测试中使用 JSON 发送请求

如何使用 C# 在 POST 请求中发送 json 数据 [重复]

节点获取 JSON 问题

在 Android 中发送和解析 JSON 对象 [关闭]