Возможный дубликат:
Определите, является ли JSON JSONObject или JSONArray
У меня есть сервер, который по умолчанию возвращает JSONArray, но когда возникает некоторая ошибка, он возвращает мне JSONObject с кодом ошибки. Я пытаюсь разобрать json и проверить на наличие ошибок, у меня есть часть кода, которая проверяет наличие ошибки:
public static boolean checkForError(String jsonResponse) { boolean status = false; try { JSONObject json = new JSONObject(jsonResponse); if (json instanceof JSONObject) { if(json.has("code")){ int code = json.optInt("code"); if(code==99){ status = true; } } } } catch (Exception e) { e.printStackTrace(); } return status ; }
Но я получаю JSONException, когда jsonResponse в порядке, и это JSONArray (JSONArray не может быть преобразован в JSONOBject). Как проверить, предоставит ли jsonResponse мне JSONArray или JSONObject?
Используйте JSONTokener
. JSONTokener.nextValue()
предоставит вам Object
который может быть динамически добавлен к соответствующему типу в зависимости от экземпляра.
Object json = new JSONTokener(jsonResponse).nextValue(); if(json instanceof JSONObject){ JSONObject jsonObject = (JSONObject)json; //further actions on jsonObjects //... }else if (json instanceof JSONArray){ JSONArray jsonArray = (JSONArray)json; //further actions on jsonArray //... }
Вы пытаетесь преобразовать ответ String, полученный с сервера в JSONObject
который вызывает исключение. Как вы сказали, вы получите JSONArray
с сервера, вы пытаетесь преобразовать его в JSONArray
. Пожалуйста, обратитесь к этой ссылке, которая поможет вам при преобразовании строкового ответа в JSONObject
и JSONArray
. Если ваш ответ начинается с [(Open Square Bracket), то преобразуйте его в JsonArray, как показано ниже
JSONArray ja = new JSONArray(jsonResponse);
Если ваш ответ начинается с {(open flower Bracket), то преобразуйте его в
JSONObject jo = new JSONObject(jsonResponse);