2013-08-28 3 views
11

У меня есть объект JSONКак разбирать логическое значение JSON?

JSONObject jsonObject = new JSONObject(); 

Я в состоянии успешно заполнить объект, но, когда я пытаюсь разобрать boolean значение JSON я получаю сообщение об ошибке:

08-28 15:06:15.809: E/Buffer Error(31857): Error converting result java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Boolean

Я делаю это как это:

boolean multipleContacts = (Boolean) jsonObject.get("MultipleContacts"); 

Мой график объект JSON очень прост, булево хранится в моей базе данных в поле BIT (0 или 1)

Как это решить?

Вот мой JSON:

{ 
    "ACCOUNT_EXIST": 1, 
    "MultipleContacts": 0 
} 
+0

Те не являются логическими. JSON Принимает логические значения true и false. –

ответ

19

Логическое не является целым числом; 1 и 0 не являются булевыми значениями в Java. Вам нужно, чтобы преобразовать их в явном виде:

boolean multipleContacts = (1 == jsonObject.getInt("MultipleContacts")); 

или serialize the ints as booleans from the start.

+6

Думаю, что это будет '0! =' [...]. По крайней мере, это почти на всех языках. –

+2

Точнее «В отличие от многих языков C-производных, в Java булевы не являются целыми ...» –

12

Попробуйте это:

{ 
    "ACCOUNT_EXIST": true, 
    "MultipleContacts": false 
} 
+2

Я не могу изменить свой JSON – meda

2

Вы можете бросить это значение в логическое значение в очень простым способом: путем сравнения его с целое значение 1, как это:

boolean multipleContacts = new Integer(1).equals(jsonObject.get("MultipleContacts")) 

Если это строка, вы можете сделать это:

boolean multipleContacts = "1".equals(jsonObject.get("MultipleContacts")) 
+0

Почему это лучше, чем использование 'JSONObject # getInt()'? –

+0

Это действительно не так - я просто дал ответ, который мог бы соответствовать коду, который даже не использовал JSON. – Mauren

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