清理 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"
我需要接受来自用户的字符串并将其按原样放入 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"