Санитарная обработка значения JSON String в Java
Мне нужно принять строку от пользователя и поместить ее как есть в JSONObject. Документация говорит, что строки могут быть заключены в '
но кажется очевидным, что я неправильно понял.
Достаточно ли этого или я что-то упустил?
jsonObject.put("name", "'" + userInput + "'");
Я прошел через put
функция, но это, кажется, не заботится о строке вообще! Есть quote
функция, но она добавляет еще один набор двойных кавычек вокруг строки, который кажется неправильным.
1 ответ
Вы, кажется, цитируете эту часть Javadoc
Строки могут быть заключены в кавычки (одинарная кавычка).
которому предшествует
Тексты, подготовленные
toString
методы строго соответствуют правилам синтаксиса JSON. Конструкторы более снисходительны в текстах, которые они примут:
JSON-строки заключены в двойные кавычки"
, так 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"