JSON解析异常org.json.JSONException:无值

时间:2019-05-15 23:41:46

标签: android json

我正在获取需要解析的JSON字符串:

response => {
    "error":false,
    "uid":39,
    "user":{
        "name":"my username",
        "email":"solinpromey@gmail.com",
        "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);

2 个答案:

答案 0 :(得分:4)

这是因为您的JSON没有名为error_msg的属性。它确实有一个名为error的名称,所以也许这正是您要查找的(尽管它是boolean而不是String,并且位于而不是user对象的内部)。

答案 1 :(得分:0)

使用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);

更多说明在这里 The difference between getString() and optString() in Json