JSON,替换引号和斜杠,但是通过什么?

时间:2012-02-20 10:32:41

标签: java json

我有一个忘恩负义的任务,用Java手动构建一个JSON字符串,没有任何框架,只是一个StringBuilder。我知道这很糟糕,但它只是原型的一部分,下次我会做得更好。

我的问题:我怎样才能把字符串 - > "Some text WITH quotes"< - 进入JSON对象?

当然,由于未转义的引号,{"key" : " "Some text WITH quotes" "}无效json。

我想我必须在这里使用String.replace,但是我可以用什么来代替引号呢?斜杠“/”的问题相同。什么是正确的替代品?

谢谢

4 个答案:

答案 0 :(得分:8)

"\"Some text WITH quotes\", slashes: /foo and backslashes \\foo"

转换为:

"Some text WITH quotes", slashes: /foo and backslashes \foo

您可以在StringEscapeUtils.escapeJavaScript() 2.6中使用Lang或在3.4中使用StringEscapeUtils.escapeEcmaScript()来为您进行逃避工作。

答案 1 :(得分:2)

如果要在JSON字符串中包含文字双引号,则必须使用反斜杠\对其进行转义。所以你的JSON字符串必须如下所示:

{"key" : " \"Some text WITH quotes\" "}

有关官方JSON语法,请参阅json.org

正斜杠/不是特殊字符,不需要转义。反斜杠\需要自行转义:\\

请注意,在Java源代码中,\也是转义字符,"也需要转义,这意味着如果您在源代码中将它们用作文字,则必须将它们转义试。

StringBuilder sb = new StringBuilder();
sb.append("{\"key\" : \" \\\"Some text WITH quotes\\\" \"");

答案 2 :(得分:1)

"\\\""+"Some text WITH quotes"+"\\\""

- > “有些文字含引号”

转义转义字符并转义字符串

中的双引号

答案 3 :(得分:0)

使用Prototype的string.evalJSON(),commons-lang的StringEscapeUtils.escapeJavaScript方法工作正常,但是使用JQuery的jQuery.parseJSON(字符串),如果字符串值包含撇号,则它不起作用通过上述方法逃脱。

严格来说,JSON字符串不应该脱离撇号(== 单引号字符)。

所以我使用StringEscapeUtils.escapeJava(String)方法,除了单引号字符外,它与escapeJavaScript一样。

但它将unicode字符转换为十六进制表示法,如果字符串包含许多unicode字符,则会增加结果脚本的长度。

也许我们应该使用一些JSON专用库,例如 的 net.sf.json.util.JSONUtils.quote(String)