转义字符串中的JSON控制字符
在Java中编写JSON解析器时遇到了“整容”问题:
在JSON规范中,明确指出Javascript控制字符与例如C和Java中的相同,如\ n或\ t。 我遇到的问题是,当JSON字符串中有控制代码时(所以在引号中:“property”:“value”),然后显示的JSON代码搞砸了,因为控制字符正在改变打印,例如\ n创建一个新行或\ t创建一个选项卡。
一个例子:
String s = "{\n\t\"property1\": \"The quick brown fox\njumps over the lazy dog\",\n\t\"property2\":\"value2\"\n}"
印刷为:
{ "property1": "The quick brown fox jumps over the lazy dog", "property2": "value2" }
解决方案如下所示:
String s = "{\n\t\"property1\": \"The quick brown fox\\njumps over the lazy dog\",\n\t\"property2\": \"value2\"\n}"
正确打印为:
{ "property1": "The quick brown fox\njumps over the lazy dog", "property2": "value2" }
所以我的问题是:将字符串外的控制代码与字符串中的控制代码区别对待是否正确? 在任何控制字符之前在JSON字符串中添加另一个反斜杠\是正确的,创建像“\ n”或“\ t”这样的字符串对JSON字符串的外观没有任何影响吗?
将字符串外的控制代码与字符串中的控制代码区别对待是否正确?
JSON规范说明
JSON文本是一系列标记。 该组令牌包括六个结构字符,字符串,数字和三个文字名称。
这些是{
, [
, }
, ]
,和,
和。 然后说明
在六个结构字符中的任何一个之前或之后允许无关紧要的空白。
您的\n
, \t
和其他(实际上规范中定义了4个)被认为是空格,因此您可以根据需要在上面的字符周围放置尽可能多的空格。
JSON字符串之外没有控制字符的概念。 这些只是空格字符。 是的,他们受到不同的待遇。
在任何控制字符之前在JSON字符串中添加另一个反斜杠
\
是正确的,创建像"\n"
或"\t"
这样的字符串对JSON字符串的外观没有任何影响吗?
在您的示例中,您正在编写String
文字。 如果您真的想在JSON字符串中编写\n
,则需要在Java String
文字中写入\\n
,对于其他转义序列也是如此。 JSON生成器必须在Java String
找到它正在转换为JSON字符串的任何空格并相应地对其进行转义。 JSON解析器必须在它解析的JSON字符串中找到文字\n
(或其他任何内容),并在它创建的Java String
适当地转换它。