Как обрабатывать JSON-ответ неизвестного типа в Java - PullRequest
0 голосов
/ 30 июля 2010

Я новичок в JSON.

Мне нужно получить ответ (в виде строки) с сервера.Этот ответ может быть объектом типа

{"a" : "value", "b" : "value2", ...}

, если запрос был успешным, или одной строкой, такой как

"ERROR"

при ошибке.

Использование org.json.JSONObject,как проверить, какой из них был возвращен?


РЕДАКТИРОВАТЬ

Я думаю, что это может сработать, но я не уверен, что это правильный путь

if(JSONString.equals("\"ERROR\"") {
    //handle error
} else {
    //parse actual object
}

Где JSONString - строка, содержащая ответ сервера

Может ли это работать?

Ответы [ 3 ]

2 голосов
/ 30 июля 2010

Строка «ОШИБКА» недопустима в формате JSON.Посмотрите на API JSONWriter , и вы увидите, что нет способа создать строку JSON, например "ОШИБКА".

Если вы всегда хотите обрабатывать ответ сервера как json, вам нужно, чтобы он возвращал что-то вроде {"error": true} или {error: false}.После этого ваша программа сможет десериализовать и проверить поле ошибки.

Если вы не можете контролировать ответ сервера, вам нужно будет протестировать String.equals ("ОШИБКА") перед десериализацией.

0 голосов
/ 30 июля 2010

По моему мнению, строка в кавычках является допустимым значением json. Грамматика на json.org не определяет объект или массив как особые производные, rfc 4627 определяет json-текст как объект или массив, но значением json также может быть число, строка, логическое значение или ноль.

Из моего прочтения javadoc org.json должно работать следующее:

Object value = new JSONTokener(inputString).nextValue();
if (value instanceof String && ((String)value).equals("ERROR")) {
    // handle error
} else if (value instanceof JSONObject) {
    // handle response data
}

Использование токена не влияет на возможные дополнительные пробелы в ответе.

0 голосов
/ 30 июля 2010

Поскольку вы не можете сделать вывод сторонней службы действительным json, прежде чем выполнять синтаксический анализ json, просто сравните строку, чтобы убедиться, что ответ «error».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...