JSON嵌套解析

时间:2019-11-21 21:02:26

标签: java json

谁能帮助我为此JSON数据文件设置解析。

我想让每列火车发车。结构是出发->全部-> 0、1、2、3等...谢谢

我正在尝试获取诸如时间,目的地和平台之类的某些字符串,然后将其显示在每次出发的列表中。

 private void jsonParse()
{
    String url = key;

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d("REST", response.toString());
                    try {
                        JSONArray jsonArray= response.getJSONArray("departures");
                        Log.d("REST", jsonArray.toString());

                        for(int i = 0; i < jsonArray.length(); i++)
                        {
                            JSONObject departure = jsonArray.getJSONObject(i);
                            JSONObject all = departure.getJSONObject("all");

                            String Mode = all.getString("Mode");

                            TextViewResult.append(Mode + "\n");

                        }


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    Queue.add(request);
}

json file

1 个答案:

答案 0 :(得分:0)

如果我正确理解,您将没有结果,对吧?

JSON对象(0、1,...)是“全部”的子级,它是JSONArray,而不是JSONObject。而且“出发”似乎是JSONObject,而不是JSONArray。您应该:

  • JSONObject的身份离开循环。

  • JSONArray的身份从上一个获得“全部”,因为它是“出发”的孩子,因此也可以自动进行

  • 在循环中的上一个JSONArray上进行迭代,获得JSONObject,它们分别代表一个离开。

因此,try中的块如下所示:

//logging omitted
JSONObject departuresJSONObj = response.getJSONObject("departures");
JSONArray allJSONArr = departuresJSONObj.getJSONArray("all");

JSONObject departureJSONObj;
String mode;

for (Object departureObj : allJSONArr) {

    if (departureObj instanceof JSONObject) {

        departureJSONObj = (JSONObject) departureObj;

        mode = departureJSONObj.getString("mode"); //mode is lowercase in the JSON
        TextViewResult.append(mode + "\n");

    }

}

希望这会有所帮助。