繁体   English   中英

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

[英]How to read [JSONArray[JSONArray]] responses from Volley service

我有一个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。 我如何一一分类/阅读它们。

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

   public class InnerObj
        {
         String id;
         String name;
        }

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

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

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

我想解析以下JSON文件,但以[开头是向我表示这是一个数组。

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

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

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

JSONArray jsonArray = new JSONArray(json);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM