2014-02-11 4 views
0

Вот мой код:Строка интерпретируется как логическое

try { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
    String temp = reader.readLine(); 
    if(temp!=null) 
     result = new JSONObject(temp); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Как вы видите, я назначу строки в объект типа Строка, но когда код выполняется, result="true" и я получаю исключение:

истинное значение из Тип java.lang.Boolean не могут быть преобразованы в JSONObject

Это расстраивает .. я должен бросить или использовать .toString() для объекта String? Почему он автоматически преобразуется в Boolean?

Update Я понял, что это не проблема Java, но JSONObject конструктор не принимает действующий JSONObject.

+2

Ну, 'true' не является объектом JSON, это JSON boolean ... – fge

+0

Каково значение переменной' temp'? Возможно, это правда? – AlexR

+0

Я уже упоминал об этом в своем сообщении: result = "true" –

ответ

2

Что вы наблюдаете - Ожидаемый. Цитируя JSONObject:

Строки не должны быть указаны на всех, если они не начинаются с цитаты или одинарные кавычки, и если они не содержат начальные или конечные пространства, и если они не содержат любой из этих символов: { } [ ]/ \ : , = ; # и если они не выглядят как цифры, и если они не являются зарезервированными словами true, false, или null.

2

"true" не является JSONObject. A JSONObject является

неупорядоченный сбор пар имя/значение.

цитата из этого же источника как @devnull. Java не интерпретирует Stringresult как Boolean, а значение JSON, представленное строкой "true", корректно интерпретируется как логическое значение JSON. Ясно, что это не набор пар имя/значение, которое обозначаемых как @Leos Literak предложил использовать фигурные скобки, двоеточия и точки с запятой:

{ key : "value"; otherkey : true } 

Я надеюсь, что это помогает. Термин «объект» используется по-разному в Java и JSON.

Смежные вопросы