Python 是否保证以JSON转义换行

Python 是否保证以JSON转义换行,python,json,Python,Json,我想要一个换行符分隔的JSON记录文件。所以记录中的换行必须转义 我的python测试字符串确实被转义了。但它是否能在所有JSON实现(如Java)中得到保证 字符串是由零个或多个Unicode字符组成的序列,用 双引号,使用反斜杠转义。字符表示为单个字符串。字符串非常类似于C或Java字符串 因此,是的,它们在所有符合标准的实现中都被转义。如果字符串被正确转义,那么只要实现符合标准,就不必担心不同的实现。 XML和JSON等数据交换格式旨在解决互操作性的困难。作为简单的文本格式,它们在所有实现

我想要一个换行符分隔的JSON记录文件。所以记录中的换行必须转义

我的python测试字符串确实被转义了。但它是否能在所有JSON实现(如Java)中得到保证

字符串是由零个或多个Unicode字符组成的序列,用 双引号,使用反斜杠转义。字符表示为单个字符串。字符串非常类似于C或Java字符串


因此,是的,它们在所有符合标准的实现中都被转义。

如果字符串被正确转义,那么只要实现符合标准,就不必担心不同的实现。 XML和JSON等数据交换格式旨在解决互操作性的困难。作为简单的文本格式,它们在所有实现中都以类似的方式进行解释

与JSON相比,XML通过允许我们指定编码格式提供了更细粒度的控制。 然而,JSON在这方面迫使我们遵循unicode编码


注意:简而言之,不要担心JSON本身,但不要忘记在标准ASCII字符上使用unicode字符串(python中的默认值更正:我之前说过JSON规范是显式的,但事实证明,网站上非正式的JSON规范并不像我想象的那样显式,更显式的RFC实际上对术语“控制字符”的解释与unicode标准不同

从:

所有Unicode字符都可以放在 引号,必须转义的字符除外: 引号、反向索利多士和控制字符(U+0000 通过U+001F)

请注意,此控制字符的定义不同于unicode:

Unicode认为字符U+007F到U+009F是控制字符,而JSON RFC则认为不是

以下是unicode中考虑换行的字符表:

两个换行符,行(U+2028)和段落(U+2029)分隔符,不是unicode控制字符。它们各自属于自己的unicode类别。NEL字符(U+0085)是一个unicode控制字符,但在JSON中不被视为控制字符。所有这三个字符都可以在JSON字符串中显示为非scaped,并表示它们自己

您可以非常有信心,任何值得一试的JSON库都不会包含CR或LF unscaped。您也不应该看到VT或FF unscaped。但是,您会看到JSON中的NEL、LS和PS字符未scaped


(我以前认为NEL在JSON中被认为是一个控制字符。在此基础上,我向Python提交了这个bug报告,在那里我的错误被指出了:)

我想知道为什么要使用换行分隔的JSON,而不是使用包含当前JSON记录的JSON列表这一更简单的选项。请注意,从技术上讲,JSON字符串可能包含换行符,因为JSON只告诉您转义
\n
\r
d
\n
是你通常得到的全部。顺便说一句,不是我的否决票。
      Unicode   ASCII  EBCDIC*
CR    000D      0D     0D     0D
LF    000A      0A     25     15
CRLF  000D,000A 0D,0A  0D,25  0D,15
NEL*  0085      85     15     25
VT    000B      0B     0B     0B
FF    000C      0C     0C     0C
LS    2028      n/a    n/a    n/a
PS    2029      n/a    n/a    n/a