如何从Volley服务读取[JSONArray [JSONArray]]响应

时间:2019-01-22 08:00:18

标签: java android arrays json

我有一个jsonArray响应。我需要阅读包含3个jsonArrays的响应。

这是json响应。这是一个GET请求,并通过Volley请求发送。

[  
  "0x9000",
  [
     [
       "D3521",
       "abc"
     ],
     [
       "D4212",
       "def"
     ],
     [ 
       "D2715",
       "hij ."
     ],
     [
       "D2366",
       "klm"
     ],
     [
       "D3660",
       "nopq"
     ]
  ]
]

这是我尝试发送字符串请求的代码。

    try{

    RequestQueue MyRequestQueue = Volley.newRequestQueue(this);

    final String endpoint = "getdoctors";
    final String url = SettingsConfig.IP + endpoint;
    StringRequest MyStringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            android.util.Log.d("print response",response);

            try {

                JSONArray jsonArray = new JSONArray(response);


                for (int i=0; i<jsonArray.length(); i++){

                    JSONArray dataArray = (JSONArray) jsonArray;

                    String code = dataArray.getString(i);

                }

            } catch (JSONException e) {
                e.printStackTrace();
                Log.e("Provider Inquiry","JSON error:" + e.getMessage());
                Intent intent = new Intent(EChannellingInfoActivity.this,MainMenuActivity.class);
                startActivity(intent);
                finish();
            }

        }
        }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately.
        @Override
        public void onErrorResponse(VolleyError error) {


            android.util.Log.d("print error", error.toString());
            //This code is executed if there is an error.
        }
    });

    MyStringRequest.setRetryPolicy(new DefaultRetryPolicy(0, 0, DefaultRetryPolicy.DEFAULT_TIMEOUT_MS));
    MyRequestQueue.add(MyStringRequest);

    return true;
    } catch (Exception e) {
            e.printStackTrace();
            return false;
    }

此响应中有3个jsonArrays。我该如何对它们进行分类/阅读。

2 个答案:

答案 0 :(得分:1)

首先创建一个包含内部实例的类

   public class InnerObj
        {
         String id;
         String name;
        }

然后使用内部对象创建外部对象的类

 public class OuterObj
        {
         String size;
         InnerObj values[];
        }

现在,您可以使用OuterObj类作为responseType,将其映射到凌空的响应

答案 1 :(得分:1)

  

我想解析以下JSON文件,但以[开头是指向我的数组。

当以[开头的JSON字符串表示该字符串为JSONArray

  

如何修改解析器以解析此文件?

1。。将JSON字符串转换为JSONArray而不是JSONObject:

JSONArray jsonArray = new JSONArray(json);

2。。将getJSONFromUrl方法的返回类型从JSONArray更改为JSONObject

3。。在doInBackground中,从JSONArray中的getJSONFromUrl方法获得响应:

 JSONArray jsonArray = jParser.getJSONFromUrl(URL);
  

这里是进一步的答案LINK

这是您可以解析JSON数组

JSONArray jsonArray = new JSONArray(response);
                        String str = (String) jsonArray.get(0);
                        JSONArray arrayTwo = jsonArray.getJSONArray(1);
                        for (int i=0; i<arrayTwo.length(); i++){
                            JSONArray dataArray = arrayTwo.getJSONArray(i);
                            String code = dataArray.getString(i);
                        }