2015-02-12 2 views
0

Мне нужно принять строку от пользователя и поместить ее как-есть в JSONObject. documentation говорит, что строки могут быть указаны с ', но кажется очевидным, что я неправильно понял.Санитирование значения строки JSON в Java

Является ли это достаточным или я что-то упускаю?

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

Я ступил через функцию put, но это, кажется, не заботится о строке на всех! Есть функция quote, но она добавляет еще один набор двойных кавычек вокруг строки, которая кажется неправильной.

+1

Почему вы обернуть 'userInput' в' ' '? –

+0

Документация json.org гласит, что строки должны быть указаны с '' '. – Monstieur

+0

Просьба ссылаться на эту документацию. –

ответ

2

Вы, кажется, со ссылкой на эту часть Javadoc

Строки могут быть указаны с '(одинарные кавычки).

, который предшествует

Тексты, продуцируемых toString методами строго соответствовать правилам синтаксиса JSON. Конструкторы более терпимы в текстах они будут принимать:

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" 
+0

Но в соответствии с http://stackoverflow.com/questions/6155560/how-to-force-json-libs-jsonobject-put-to-escape-a-string-containing-json, если строка действительна JSON 'put 'функция вставляет его как вложенный объект JSON! Ответ там говорит, чтобы обернуть его в одинарные кавычки. – Monstieur

+0

@Locutus Что вы пытаетесь сделать? 'JSONObject # put' принимает второй аргумент и преобразует его в соответствующее значение JSON. Если это String, он преобразует его в строку JSON (экранируя символы, которые в ней нуждаются). Это число, оно преобразует его в номер JSON. Если это массив, массив JSON. Если это объект, объект JSON. Если вы пытаетесь вставить JSON в JSON, создайте 'JSONObject' из' userInput' и 'put' that. –

+0

@ Locutus Очевидно, что если вы не знаете, является ли значение userInput значением JSON, то 'JSONObject' правильно предоставляет способ записать его в текст JSON raw. Если 'userInput' недействителен JSON, он нарушит конечное значение JSON. –