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)