如何在JsonArray中选择特定的JsonObject?

时间:2017-09-07 10:42:54

标签: java android json

我正在创建一个简单的天气应用程序,因此我可以与Json练习,假设我想显示一周内的前5天。以下json数据仅显示2天,但原则仍然适用。如何显示或指定我想使用每天12:00显示温度的对象? (包含时间的dt_txt)

{  
 cod:"200",
 message:0.0074,
 cnt:40,
 list:[  
  {  
     dt:1504785600,
     main:{  
        temp:291.34,
        temp_min:291.34,
        temp_max:291.648,
        pressure:1012.84,
        sea_level:1025.43,
        grnd_level:1012.84,
        humidity:69,
        temp_kf:-0.31
     },
     weather:[  
        {  
           id:801,
           main:"Clouds",
           description:"few clouds",
           icon:"02d"
        }
     ],
     clouds:{  
        all:20
     },
     wind:{  
        speed:6.06,
        deg:242.502
     },
     sys:{  
        pod:"d"
     },
     dt_txt:"2017-09-07 12:00:00"
  },
  {  
     dt:1504796400,
     main:{  
        temp:288.71,
        temp_min:288.71,
        temp_max:288.942,
        pressure:1010.63,
        sea_level:1023.18,
        grnd_level:1010.63,
        humidity:93,
        temp_kf:-0.23
     },
     weather:[  
        {  
           id:500,
           main:"Rain",
           description:"light rain",
           icon:"10d"
        }
     ],
     clouds:{  
        all:92
     },
     wind:{  
        speed:7.02,
        deg:236.001
     },
     rain:{  
        3            h:1.055
     },
     sys:{  
        pod:"d"
     },
     dt_txt:"2017-09-07 15:00:00"
  },
  {  
     dt:1504807200,
     main:{  
        temp:288.25,
        temp_min:288.25,
        temp_max:288.405,
        pressure:1008.34,
        sea_level:1020.83,
        grnd_level:1008.34,
        humidity:96,
        temp_kf:-0.15
     },
     weather:[  
        {  
           id:500,
           main:"Rain",
           description:"light rain",
           icon:"10d"
        }
     ],
     clouds:{  
        all:92
     },
     wind:{  
        speed:6.83,
        deg:235.004
     },
     rain:{  
        3            h:1.505
     },
     sys:{  
        pod:"d"
     },
     dt_txt:"2017-09-07 18:00:00"
  },
  {  
     dt:1504818000,
     main:{  
        temp:287.77,
        temp_min:287.77,
        temp_max:287.846,
        pressure:1007.04,
        sea_level:1019.52,
        grnd_level:1007.04,
        humidity:92,
        temp_kf:-0.08
     },
     weather:[  
        {  
           id:500,
           main:"Rain",
           description:"light rain",
           icon:"10n"
        }
     ],
     clouds:{  
        all:92
     },
     wind:{  
        speed:6.33,
        deg:243
     },
     rain:{  
        3            h:0.025
     },
     sys:{  
        pod:"n"
     },
     dt_txt:"2017-09-07 21:00:00"
  },
  {  
     dt:1504828800,
     main:{  
        temp:287.447,
        temp_min:287.447,
        temp_max:287.447,
        pressure:1004.6,
        sea_level:1017.03,
        grnd_level:1004.6,
        humidity:94,
        temp_kf:0
     },
     weather:[  
        {  
           id:500,
           main:"Rain",
           description:"light rain",
           icon:"10n"
        }
     ],
     clouds:{  
        all:92
     },
     wind:{  
        speed:7,
        deg:241.004
     },
     rain:{  
        3            h:0.285
     },
     sys:{  
        pod:"n"
     },
     dt_txt:"2017-09-08 00:00:00"
  },
  {  
     dt:1504839600,
     main:{  
        temp:287.117,
        temp_min:287.117,
        temp_max:287.117,
        pressure:1002.19,
        sea_level:1014.65,
        grnd_level:1002.19,
        humidity:97,
        temp_kf:0
     },
     weather:[  
        {  
           id:500,
           main:"Rain",
           description:"light rain",
           icon:"10n"
        }
     ],
     clouds:{  
        all:92
     },
     wind:{  
        speed:6.17,
        deg:252.002
     },
     rain:{  
        3            h:1.265
     },
     sys:{  
        pod:"n"
     },
     dt_txt:"2017-09-08 03:00:00"
  },
  {  
     dt:1504850400,
     main:{  
        temp:286.676,
        temp_min:286.676,
        temp_max:286.676,
        pressure:1001.27,
        sea_level:1013.77,
        grnd_level:1001.27,
        humidity:94,
        temp_kf:0
     },
     weather:[  
        {  
           id:500,
           main:"Rain",
           description:"light rain",
           icon:"10d"
        }
     ],
     clouds:{  
        all:88
     },
     wind:{  
        speed:5.71,
        deg:261.514
     },
     rain:{  
        3            h:0.085
     },
     sys:{  
        pod:"d"
     },
     dt_txt:"2017-09-08 06:00:00"
  },
  {  
     dt:1504861200,
     main:{  
        temp:288.297,
        temp_min:288.297,
        temp_max:288.297,
        pressure:1000.5,
        sea_level:1012.88,
        grnd_level:1000.5,
        humidity:86,
        temp_kf:0
     },
     weather:[  
        {  
           id:804,
           main:"Clouds",
           description:"overcast clouds",
           icon:"04d"
        }
     ],
     clouds:{  
        all:88
     },
     wind:{  
        speed:5.92,
        deg:255.502
     },
     rain:{  

     },
     sys:{  
        pod:"d"
     },
     dt_txt:"2017-09-08 09:00:00"
  },
  {  
     dt:1504872000,
     main:{  
        temp:287,
        temp_min:287,
        temp_max:287,
        pressure:998.66,
        sea_level:1011.06,
        grnd_level:998.66,
        humidity:96,
        temp_kf:0
     },
     weather:[  
        {  
           id:500,
           main:"Rain",
           description:"light rain",
           icon:"10d"
        }
     ],
     clouds:{  
        all:92
     },
     wind:{  
        speed:5.74,
        deg:252.501
     },
     rain:{  
        3            h:1.78
     },
     sys:{  
        pod:"d"
     },
     dt_txt:"2017-09-08 12:00:00"
  }

到目前为止,我可以使用代码访问JsonArray中的每个对象,使用代码:

    JSONObject forecast = new JSONObject(jsonData);
    JSONArray list = currentForecast.getJSONArray("list");

    Current currents = new Current();
    for(int i = 0; i < list.length(); i++){

        JSONObject Info = list.getJSONObject(i);
        JSONObject temp = Info.getJSONObject("main");

        currents.setTemp(temp.getDouble("temp"));
}

我怎样才能只访问时间为12:00的数据?

2 个答案:

答案 0 :(得分:0)

你可以这样做。

JSONObject forecast = new JSONObject(jsonData);
JSONArray list = currentForecast.getJSONArray("list");

try
{
    Current currents = new Current();
    for (int i = 0; i < list.length(); i++)
    {
        JSONObject Info = list.getJSONObject(i);

        // Note: I just mentioned the way how to do logic the below .equal condition not 
                 working when you just copy and paste the code it is just for your 
                 reference.
        // If time is 12:00
        if (Info.getString("dt_txt").equals("12:00:00"))
        {
            // Do your logic here.
            JSONObject temp = Info.getJSONObject("main");
            currents.setTemp(temp.getDouble("temp"));
        }
        else
        {
            // If time is not 12:00.   
        }
    }
} 
catch (JSONException e)
{
    e.printStackTrace();
}

答案 1 :(得分:0)

试试这个:

JSONObject forecast = new JSONObject(jsonData);
JSONArray list = currentForecast.getJSONArray("list");

Current currents = new Current();
for(int i = 0; i < list.length(); i++){

    JSONObject Info = list.getJSONObject(i);
    JSONObject temp = Info.getJSONObject("main");

    double dub = temp.getDouble("temp");

    // "dt_txt" is at the top level of the node
    String time = Info.getString("dt_txt");

    //geteverything after the last space
    String sub = time.substring(time.lastIndexOf(' ') + 1);

    //test for 12:00:00 on time string
    // only put in currents if it is 12:00:00

    if(sub.equals("12:00:00") {
        currents.setTemp(dub));
    }