清理 Java 中的 JSON 字符串值

Sanitising a JSON String value in Java

我需要接受来自用户的字符串并将其按原样放入 JSONObject。 documentation 表示字符串可以用 ' 引用,但很明显我误解了。

这足够了还是我遗漏了什么?

jsonObject.put("name", "'" + userInput + "'");

我单步执行了 put 函数,但它似乎根本不关心字符串!有一个 quote 函数,但它在字符串周围添加了另一组双引号,这似乎不正确。

您似乎引用了 Javadoc

的这一部分

Strings may be quoted with ' (single quote).

前面是

The texts produced by the toString methods strictly conform to the JSON syntax rules. The constructors are more forgiving in the texts they will accept:

JSON strings are wrapped in double quotes "。所以 JSONObject#toString 将产生一个 JSON 值,其中 JSON 字符串在语法上是正确的。但是,JSONObject 构造函数可以接受 JSON 值(作为文本),其中 JSON 字符串用单引号而不是双引号括起来。

例如

JSONObject object = new JSONObject("{'bad':'json'}"); // not valid JSON
System.out.println(object);

产生有效的

{"bad":"json"}

put 方法在这里完全不相关。您不需要(也不应该)在指定的字符串周围使用单引号。


来自您的评论

JSONObject obj = new JSONObject();
obj.put("jsonStringValue","{\"hello\":\"world\"}");
obj.put("naturalStringValue", "\"hello world\"");
System.out.println(obj.toString());
System.out.println(obj.getString("jsonStringValue"));
System.out.println(obj.getString("naturalStringValue"));

打印

{"jsonStringValue":"{\"hello\":\"world\"}","naturalStringValue":"\"hello world\""}
{"hello":"world"}
"hello world"