代码之家  ›  专栏  ›  技术社区  ›  mvasco

Android中的JSON字符串解析正在启动异常

  •  0
  • mvasco  · 技术社区  · 5 年前

    我需要解析以下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);
    
    1 回复  |  直到 5 年前
        1
  •  4
  •   CommonsWare    5 年前

    这是因为JSON没有名为 error_msg . 它 叫一个 error ,所以也许这就是你想要的(尽管它是 boolean ,不是 String ,它在顶层,而不是在 user 对象)。

        2
  •  0
  •   Quick learner    5 年前

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