我有一个忘恩负义的任务,用Java手动构建一个JSON字符串,没有任何框架,只是一个StringBuilder。我知道这很糟糕,但它只是原型的一部分,下次我会做得更好。
我的问题:我怎样才能把字符串 - > "Some text WITH quotes"
< - 进入JSON对象?
当然,由于未转义的引号,{"key" : " "Some text WITH quotes" "}
无效json。
我想我必须在这里使用String.replace,但是我可以用什么来代替引号呢?斜杠“/”的问题相同。什么是正确的替代品?
谢谢
答案 0 :(得分:8)
"\"Some text WITH quotes\", slashes: /foo and backslashes \\foo"
转换为:
"Some text WITH quotes", slashes: /foo and backslashes \foo
您可以在StringEscapeUtils.escapeJavaScript()
apache-commons 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) 强>