Исключение синтаксического анализа JSON org.json.JSONException: нет значения

Я получаю следующую строку JSON, которую мне нужно проанализировать:

response => {
    "error":false,
    "uid":39,
    "user":{
        "name":"my username",
        "email":"[email protected]",
        "created_at":"2019-05-15 13:22:19",
        "updated_at":null,
        "imagen":null,
        "nombre":null,
        "apellidos":null,
        "nivel_usuario":null,
        "id_usuario":39,
        "unique_id":null,
        "verified":null,
        "cel_verificado":null,
        "tel":"123456789",
        "code_cel":null
    }
}

Мне нужно получить значения для полей внутри ключевого пользователя.

Я пытаюсь следующим образом, но не работает:

String errorMsg = jObj.getString("error_msg");

Здесь я получаю исключение:

W/System.err: org.json.JSONException: No value for error_msg

и, следовательно, следующие строки не выполняются:

JSONObject jObj = new JSONObject(response);
JSONObject user = jObj.getJSONObject("user");
String email = user.getString("email");

Log.d("RESPUESTA", "RESPUESTA email" + email);

person mvasco    schedule 15.05.2019    source источник
comment
В вашем ответе нет поля с именем "error_msg". Может ошибка? И тип этого поля — boolean, а не string.   -  person Jin    schedule 16.05.2019


Ответы (2)


Это потому, что в вашем JSON нет свойства с именем error_msg. У него действительно есть объект с именем error, поэтому, возможно, это то, что вы ищете (хотя это boolean, а не String, и он находится на верхнем уровне, а не внутри объекта user).

person CommonsWare    schedule 15.05.2019

Используйте optString(), это не даст вам исключения

Также убедитесь, что тип поля error_msg

Нравится, если это String используйте это

String error_msg= address.optString("error_msg")

для boolean используйте это

 boolean error_msg= address.optBoolean("error_msg")

Фрагмент кода

JSONObject jObj = new JSONObject(response);
JSONObject user = jObj.getJSONObject("user");
String email = user.getString("email");
String error_msg= address.optString("error_msg") //string type field use optBoolean for boolean
Log.d("RESPUESTA", "RESPUESTA email" + email);

Дополнительные пояснения здесь Разница между getString() и optString() в JSON

person Quick learner    schedule 17.05.2019