【问题标题】:Why is Python not JSON Standard (rfc7159) Compliant by default?为什么 Python 默认不符合 JSON 标准 (rfc7159)?
【发布时间】:2020-07-01 15:14:58
【问题描述】:

用于 JSON 的 Python3 标准库 https://docs.python.org/3/library/json.html 记录了以下内容(重点是我的):

如果allow_nan 为假(默认:真),那么它将是一个ValueError 序列化超出范围的浮点值(nan、inf、-inf)严格 符合 JSON 规范。如果 allow_nan 为真,则它们的 将使用 JavaScript 等效项(NaN、Infinity、-Infinity)。

进一步了解编码器:

如果 allow_nan 为 true(默认值),则为 NaN、Infinity 和 -Infinity 将被如此编码。 此行为不是 JSON 规范 兼容,但与大多数基于 JavaScript 的编码器和 解码器。否则,对这些浮点数进行编码将是一个 ValueError。

虽然对于那些能够故意解析 NaN 的人来说,这很好,但为什么 Python 不遵循 JSON 规范作为默认值?

【问题讨论】:

  • "...但与大多数基于 JavaScript 的编码器和解码器一致"。这就是为什么。在实践中有用比在技术上正确和遵守标准更重要,因为这样做会破坏您可能必须与之交互的其他事情。
  • 可能是因为“但与大多数(强调我的)基于 JavaScript 的编码器和解码器一致”。
  • @GreenCloakGuy 我来这里是因为 Python 的行为导致它通过无法用多种语言解析的 API 发出无效数据。遵循这个标准几乎不会破坏事情。
  • @BookOfGreg 您能否更具体地说明导致问题的行为是什么?

标签: python json python-3.x


【解决方案1】:

答案是同一句话:因为它与其他不遵循标准的编码器和解码器是一致的。

JSON 直到 2013 年才标准化,并且可能做出要求超出范围的值来引发错误的决定尽管通常的做法是生成特殊值。

法律标准(如 EMCA-404/RFC 8259/ISO/IEC 21778:2017),也有事实上的标准(每个人都在没有真正的标准或向后兼容标准前的做法的情况下这样做)。

【讨论】:

  • 鉴于 Python 3 于 2008 年问世,这比关于有用性的推测更有可能是正确的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 2019-08-17
  • 2017-05-27
  • 2011-01-19
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多