转义字符串中的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适当地转换它。