【问题标题】:sending NaN in json在 json 中发送 NaN
【发布时间】: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”。

标签: python json serialization 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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2018-07-16
      • 2018-02-16
      • 2015-10-25
      相关资源
      最近更新 更多