【问题标题】:Parsing Json object received from rest api解析从rest api收到的Json对象
【发布时间】:2019-09-22 09:02:41
【问题描述】:

我正在使用 Volley 库来执行我的其余 API。

使用它,我已将电子邮件、密码条目发送到 URL 并以 JSON 格式接收响应:

{
    "success": true,
    "data": {
        "message": false,
        "token": "some token value"
    }
}

现在我想解析从响应中收到的“令牌”字段并执行进一步的操作。这个怎么解析?

这是我要解析响应的函数。

public void parseData(String response) {

try {
     JSONObject jsonObject = new JSONObject(response);
     if (jsonObject.getString("success").equals("true")) {

    Toast.makeText(MainActivity.this,"UserExists",Toast.LENGTH_LONG).show();

           ////RETRIEVE "token" HERE

        else {

         Toast.makeText(MainActivity.this,"User not registered",Toast.LENGTH_LONG).show();

        }

我已经看到这个链接How to parse JSON Object Android Studio 但我的“令牌”字段在另一个对象中,所以不知道该怎么做。

【问题讨论】:

  • 您是否查看过 JsonObject 类的 Javadoc 并看到任何告诉您如何访问另一个对象的方法?
  • 注意:成功字段是布尔值,不是字符串
  • 只需复制并粘贴我的解决方案即可!

标签: android json android-volley


【解决方案1】:

如果您想以相同的手动方式解析 JSON,您必须这样做才能获取令牌。

try {
        JSONObject jsonObject = new JSONObject(response);
        if (jsonObject.getBoolean("success")== true) {
            Toast.makeText(MainActivity.this, "UserExists", Toast.LENGTH_LONG).show();

            JSONObject dataObj= jsonObject.getJSONObject("data");
            String token= dataObj.getString("token");

            ////RETRIEVE "token" HERE
        } else {

            Toast.makeText(MainActivity.this, "User not registered", Toast.LENGTH_LONG).show();
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

【讨论】:

    【解决方案2】:

    解决办法

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
        Request.Method.GET, url, null, 
        new Response.Listener<JSONObject>() {
    
            @Override
            public void onResponse(JSONObject response) { 
                JSONObject dataObj = response.getObject("data");
                 String token = dataObj.getString("token");
            }
        }, new Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO: Handle error
            }
        }
    );
    

    请使用 POJO 进行解析。否则你会花更多的时间来做这种工作。

    【讨论】:

    • 但这是不兼容的类型。 JSONObject dataObj = jsonObject.getString("data");此行出错
    • @user response.getObject("数据"
    【解决方案3】:

    如果您使用的是Volley,为什么不直接使用JsonObjectRequest

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
        Request.Method.GET, 
        url, 
        null, 
        new Response.Listener<JSONObject>() {
    
            @Override
            public void onResponse(JSONObject response) {
                // parse the response   
                JSONObject data= response.getObject("data");
                String token = data.getString("token");
            }
        }, new Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO: Handle error
            }
        }
    );
    
    MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);
    

    【讨论】:

      【解决方案4】:

      你可以尝试如下。

      public void parseData(String response) {
           try {
               JSONObject jsonObject = new JSONObject(response);
               if (jsonObject.getString("success").equals("true")){
                    Toast.makeText(MainActivity.this,"UserExists",Toast.LENGTH_LONG).show();
      
                     ////RETRIEVE "token" HERE
                     JSONObject dataObject = jsonObject.getObject("data");
                     String token = dataObject.getString("token");
                }
                else {
                    Toast.makeText(MainActivity.this,"User not registered",Toast.LENGTH_LONG).show();
                }
            }catch(JSONException e) {
               Log.e("YourTAG","exceptions "+e.toString());
          }
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        • 2021-04-15
        相关资源
        最近更新 更多