是否保证换行符以JSON格式转义

时间:2013-07-12 12:10:28

标签: python json

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

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

3 个答案:

答案 0 :(得分:0)

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

通过让我们指定编码格式,与JSON相比,XML提供了更精细的控制。 但是,JSON在这方面迫使我们遵循unicode编码。

注意:简而言之,不要担心JSON本身,但不要忘记使用unicode字符串超过标准ASCII字符(默认为python< = 2.7)物。 这将确保JAVA以正确的方式解释字符串,因为JAVA默认具有unicode编码格式。

答案 1 :(得分:0)

更正:我之前说JSON规范是明确的,但事实证明网站上的非正式JSON规范并不像我想象的那样明确,而更明确的RFC实际上对术语“控制”有不同的解释字符“比unicode标准。

来自JSON RFC

  

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

请注意,控制字符的这个定义与unicode不同:

http://www.fileformat.info/info/unicode/category/Cc/list.htm

Unicode将字符U + 007F视为U + 009F控制字符,而JSON RFC则认为它们不是。

这是一个在unicode中被视为换行符的字符表:

http://www.unicode.org/standard/reports/tr13/tr13-5.html

      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

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

您可以非常自信任何值得盐的JSON库都不会包含未转义的CR或LF。你也不应该看到VT或FF没有转义。但是你会看到NSON,LS和PS字符在JSON中没有转义。

(我之前认为NEL被认为是JSON中的控制角色。在此基础上我将此错误报告提交给Python,我向我指出了错误:http://bugs.python.org/issue21194

答案 2 :(得分:-1)

根据JSON specs

  

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

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