0

我有一个来自必须放入 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-simpleJSON 库,我正在查看结果 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的人知道解决方法?

4

1 回答 1

3

我怀疑您在自动为您转义反斜杠的上下文中查看字符串。你的倒数第二个样本应该没问题。例如:

public class Test {
    public static void main(String[] args) {
        System.out.println("sample user's string".replaceAll("'", "\\\\'"));
    }
}

印刷:

sample user\'s string

您没有说您在哪里查看该值,但如果它在调试器中,那么很可能会为您加倍反斜杠,以呈现该值,就好像它在 Java 文字中一样。

但理想情况下,您不应该手动执行此类操作 - 这太容易出错了。您应该使用为您处理所有这些的 JSON 库,因此您需要指定值。

于 2012-09-17T20:11:43.237 回答