我得到了一个来自数据库的字符串值,该值必须放入JSON中,但该值可以包含单引号和双引号。听起来很简单,对吧?显然Java 1.4.2中没有。不要让我开始解释为什么它必须是1.4.2,我从另一个开发人员那里继承了这个,由于我无法控制的因素,我们还不能更新这个项目。:)
所以,我尝试了所有这些(还有很多其他的只是为了看看结果):
"sample user's string".replaceAll("'", "'") // returns "sample user's string"
"sample user's string".replaceAll("'", "\'") // returns "sample user's string"
"sample user's string".replaceAll("'", "\'") // returns "sample user's string"
"sample user's string".replaceAll("'", "\\'") // returns "sample user\'s string"
"sample user's string".replaceAll("'", "%%") // returns "sample user%%s string"
我只想要sample user's string
,我做错了什么?糟糕的是1.4.2没有String.replace(String,String)函数。
编辑:我们使用的是json-simple
JSON库,我在生成的JSON字符串中查看了上述命令的输出。我添加了额外的调试信息来查看JSON输出之前的值,看起来上面的命令确实有效,但json-simple
库正在剥离转义字符。
所以,我看到的是:
"sample user's string".replaceAll("'", "\\'") // sample user's string
myJSONObject.put("value", "sample user's string".replaceAll("'", "\\'")) // sample user\'s string"
myJSONObject.put("value", "sample user's string") // sample user's string
因此,看起来图书馆并没有像预期的那样做好自己的工作。使用过json-simple
的人知道解决这个问题的方法吗?
我怀疑您在上下文中查看的字符串会自动为您转义反斜杠。你的倒数第二个样本应该是好的。例如:
public class Test {
public static void main(String[] args) {
System.out.println("sample user's string".replaceAll("'", "\\'"));
}
}
打印:
sample user's string
您没有说明在哪里查看该值,但如果它在调试器中,则很可能会将反斜杠加倍,以将该值显示为Java文本中的值。
不过,理想情况下,你不应该手动做这类事情——这太容易出错了。您应该使用一个JSON库来处理所有这些,所以只需要指定值。