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

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

我的问题:如何将字符串 – > "Some text WITH quotes" < – 放入JSON对象?

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

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

谢谢

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

翻译为:

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

您可以在3.4中的apache-commons Lang 2.6或StringEscapeUtils.escapeEcmaScript()中使用StringEscapeUtils.escapeJavaScript()来为您进行转义的艰苦工作。

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

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

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

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

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

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

– > \“有些文字WITH引号\”

转义转义字符并转义字符串中的双引号

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

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

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

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

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