正在解析从 rest api 接收到的 Json 对象

Parsing Json object received from rest api

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

使用这个我已经将电子邮件和密码条目发送到 URL 并在 JSON 中收到回复:

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

现在我想解析从响应中收到的 'token' 字段并做进一步的操作。如何解析?

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

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();

        }

我看过这个 link 但是我的 "token" 字段在另一个对象中,所以不知道该怎么做。

如果您正在使用 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);

这是解决方案

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进行解析。否则你会花更多的时间来做这种工作。

如果您想以相同的手动方式解析 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();
    }

您可以像下面这样尝试。

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());
    }

希望对你有帮助。