我想要一个换行符分隔的JSON记录文件。因此必须转义记录中的换行符。
我在python中的测试字符串确实被转义了。但是它是否可以在所有JSON实现(如Java)中得到保证?
答案 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字符串。
所以是的,它们在所有符合标准的实现中都被转义。