【发布时间】:2014-05-31 11:43:12
【问题描述】:
在用 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 字符串中在任何控制字符之前添加另一个反斜杠 \ 是否正确,从而创建不会对 JSON 字符串的外观产生任何影响的字符串,例如“\n”或“\t”?
【问题讨论】:
-
呃,你为什么不用 JSON 库?
-
为什么人们要自己造车而不是买车?我不知道,你呢?...嗯,实际上是因为没有汽车可以做我想做的事。 ;)
-
简单,速度,各种各样的东西......但我不是在这里讨论我的问题,而不是解决它。
-
不,我不会。我唯一要做的就是对杰克逊进行逆向工程,但我希望在这里能得到一个快速的答案。那么,那么……
-
这不是重新发明轮子。它正在建造一辆自己的汽车。实际上,我读过 RFC 7159,它是我读过的最糟糕的 RFC 之一。正如我所说:JSON 标准中没有解决上述问题。所以连一个运转的轮子都没有,你明白吗?
标签: java json string parsing escaping