如何解析 Json POST 请求 onResponse Stringrequest 数据

Posted

技术标签:

【中文标题】如何解析 Json POST 请求 onResponse Stringrequest 数据【英文标题】:How to parse Json POST request onResponse Stringrequest data 【发布时间】:2020-02-13 23:09:05 【问题描述】:

我有一些 JSON 响应需要找到从数据中解析令牌的方法


  "status": true,
  "message": "Logged in successfully",
  "error_code": 0,
  "result": 
    "token": "eyJ0eXAiOiJBdXRoIiwiYWxnIjoiSFMyNTYifQ.eyJpYXQiOjE1NzEyODczNjEsImV4cCI6MTU3MTM3Mzg2MSwicGF5bG9hZCI6eyJ1c2VyX2lkIjoiMTAxIiwiY29tcGFueV9pZCI6IjEifX0.-BEWhUT762rkcdZCBG6gU8q52AhITUm_kPazh1Tsj78",
    "unique_id": "101",
    "first_name": "AAA",
    "last_name": "R",
    "user_groups_sites": [
      
        "group_id": "6",
        "group_name": "Zonal Manager",
        "group_key": "zonal_manager",
        "sites": [
          
            "site_id": "1",
            "site_name": "AAAA"
          
        ]
      ,
      
        "group_id": "5",
        "group_name": "Auditor",
        "group_key": "auditor",
        "sites": [
          
            "site_id": "1",
            "site_name": "AAAAA"
          
        ]
      
    ]
  

【问题讨论】:

您尝试过吗,如果您没有尝试过,请您自己尝试,如果您在解析时发现任何问题,我们随时为您提供帮助,祝您好运。 显示调用 api 的函数。 public void parseData(String response) try JSONObject jsonObject = new JSONObject(response); if (jsonObject.getString("error_code").equals("0")) String dataArray = jsonObject.getString("message"); Toast.makeText(LoginActivity.this, dataArray, Toast.LENGTH_LONG).show(); Intent intent = new Intent(LoginActivity.this,category_selection.class);开始活动(意图); else Toast.makeText(LoginActivity.this,"无效登录",Toast.LENGTH_LONG).show(); catch (JSONException e) e.printStackTrace(); 不是这个兄弟,我说的改装电话..下面是您将得到答案的解决方案 @YogeshNikamPatil 兄弟我正在使用 Volley 库而不是改造 【参考方案1】:

解决方案 1:

JSONObject jsonObject = null;
try 
    jsonObject = new JSONObject(response);
    JSONObject myResponse = jsonObject.getJSONObject("result");
    String mToken = (String) myResponse.getString("token");
    Log.e("result", myResponse.toString());


    JSONArray userGroupsSites = myResponse.getJSONArray("user_groups_sites");

    for (int i = 0; i < userGroupsSites.length(); i++) 
        JSONObject sites = userGroupsSites.getJSONObject(i);
        Log.e("actor", sites.toString());

        JSONArray getSiteObject = sites.getJSONArray("sites");
        JSONObject siteValue = getSiteObject.getJSONObject(0);
        Log.e("siteValue", siteValue.toString());

        String getSiteId = (String) siteValue.getString("site_id");
        String getSiteName = (String) siteValue.getString("site_name");
        System.out.println("Site Id: " + getSiteId);
        System.out.println("Site Name: " + getSiteName);

    


 catch (JSONException e) 
    e.printStackTrace();

Sol:2 创建模型类:

模型.java

public class Model 
    private boolean status;
    private String message;
    ResultData result;

    public boolean isStatus() 
        return status;
    

    public void setStatus(boolean status) 
        this.status = status;
    

    public String getMessage() 
        return message;
    

    public void setMessage(String message) 
        this.message = message;
    

    public ResultData getResult() 
        return result;
    

    public void setResult(ResultData result) 
        this.result = result;
    

    public class ResultData 

        private String token;

        public String getToken() 
            return token;
        

        public void setToken(String token) 
            this.token = token;
        
    

API 调用应该是:

call.enqueue(new Callback<Model>() 
    @Override
    public void onResponse(@NonNull Call<Model> call, @NonNull Response<Model> response) 
        System.out.println(response.body().getResult().getToken());
    

    @Override
    public void onFailure(@NonNull Call<Model> call, @NonNull Throwable t) 
        t.printStackTrace();
    
);

这会很好用。

【讨论】:

兄弟我正在使用 volley 库 好的显示Volley调用方法,我会更新我的答案 public void parseData(String response) try JSONObject jsonObject = new JSONObject(response); if (jsonObject.getString("error_code").equals("0")) String dataArray = jsonObject.getString("message"); Toast.makeText(LoginActivity.this, dataArray, Toast.LENGTH_LONG).show(); Intent intent = new Intent(LoginActivity.this,category_selection.class);开始活动(意图); else Toast.makeText(LoginActivity.this,"无效登录",Toast.LENGTH_LONG).show(); catch (JSONException e) e.printStackTrace(); 这就是我现在的调用方式。 public void onResponse(String response) // Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show(); Log.v("tests11111t"+response,"tetstsststt");解析数据(响应); 不是这个兄弟...好吧试试这个: JSONObject jsonObject = new JSONObject(response); JSONObject myResponse = jsonObject.getJSONObject("result"); String mToken = (String) myResponse.getString("token"); System.out.println(mToken+"");【参考方案2】:

您可以解析您的 json 响应,首先获取主 json 对象,然后获取第一个名为 result 的对象。

JSONObject jsonobject = new JSONObject(response);
JSONObject resultObject = jsonobject.getJSONObject("result");

String token = resultObject.getString("token");

【讨论】:

把你的方法发给我 提供您调用 api 的方法,以便我们为您提供帮助。

以上是关于如何解析 Json POST 请求 onResponse Stringrequest 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CherryPy 的 POST 请求中接收 JSON?

post请求获取json数据 解析json数据

如何将 json 列表传递给 Flutter 中的 http 请求(post)正文?

Springmvc处理post+json数据

Struts2 Action接收POST请求JSON数据及其实现解析

无法通过 @POST 请求使用 Retrofit 解析 JSON 响应和参数