Java 如何解析OpenWeatherMap 16天json?

Java 如何解析OpenWeatherMap 16天json?,java,android,json,openweathermap,Java,Android,Json,Openweathermap,嗨,我正在尝试创建一个android应用程序,它将从opneweathermap显示天气。到目前为止,我的应用程序显示了今天的天气,但我无法解析16天的JSON。我试图得到每一天的最低和最高温度。任何帮助都将不胜感激 {“cod”:“200”,“消息”:0.4667,“cnt”:7,“列表”:[{“dt”:1512777600,“主要”:“{”温度:0.71,“温度:最低”:0.71,“温度:最高”:5.21,“压力”:1030.25,“海平面”:1035.12,“地面”:1030.25,“湿度

嗨,我正在尝试创建一个android应用程序,它将从opneweathermap显示天气。到目前为止,我的应用程序显示了今天的天气,但我无法解析16天的JSON。我试图得到每一天的最低和最高温度。任何帮助都将不胜感激

{“cod”:“200”,“消息”:0.4667,“cnt”:7,“列表”:[{“dt”:1512777600,“主要”:“{”温度:0.71,“温度:最低”:0.71,“温度:最高”:5.21,“压力”:1030.25,“海平面”:1035.12,“地面”:1030.25,“湿度”:100,“温度:kf”:-4.5},“天气”:[{“id”:800,“主要”:“晴朗”,“描述”:“晴朗的天空”,“图标”:“01n”}”,“云层”:“全部”:0},“风速”:100,“风速”:8“{,“sys:{”pod:“n”},dt_txt:“2017-12-09 00:00:00”},{”dt:“1512788400,”main:“{”temp:“temp:”1.35,“temp:”min:”1.35,“temp:”max:”4.72,“pressure:”1029.09,“海平面”:1034,“地面标高”:1029.09,“湿度”:100,“temp:”kf:”3.38“,”天气“{”id:“800”,“main:”晴朗”,“天空”,“图标“:”01n“,”云层“,”风速“,”0:”0:”,”雨“{298:”,”系统:{“pod”:“n”},“dt txt”:“2017-12-09 03:00:00”},{“dt”:1512799200,“main”:{“temp”:2.21,“temp_min”:2.21,“temp_max”:4.46,“pressure”:1027.47,“海平面”:1032.37,“grnd_level”:1027.47,“湿度”:100,“temp_-kf”:-2.25},“天气”:[{“id”:801,“main”:“云”,“描述”:“少云”,“图标”:“02n”],“云层”,风速:{“24”,“风速”:280}雨:{},sys:{pod:“n”},dtu txt:“2017-12-09 06:00:00”{“dt”:1512810000,“main”{“temp”:3.35,“temp\u min”:3.35,“temp\u max”:4.47,“气压”:1025.64,“海平面”:1030.48,“地面标高”:1025.64,“湿度”:100,“temp\u kf”:-1.13},“天气”[{“id”:802,“main”:“云”;“描述”;“散落的云”;“03d”;“云层”;“风速”;“{deg:275.001},“雨”:{},“系统”:{“pod”:“d”},“dt txt”:“2017-12-09 09 09:00:00”},{“dt”:1512820800,“主要”:{“温度”:5.02,“温度最低”:5.02,“温度最高”:5.02,“气压”:1023.2,“海平面”:1028.06,“地面高度”:1023.2,“湿度”:100,“温度”:0},“天气”:[{“id”:803,“主要”:“云朵”,“描述”:“碎云”,“所有风速”:“{“:6.12,“deg”:266},“rain”:{},“sys”:{“pod”:“d”},“dt”txt:“2017-12-09 12:00:00”},{“dt”:1512831600,“main”:{“temp”:5.29,“temp\u min”:5.29,“temp\u max”:5.29,“气压”:1019.44,“海平面”:1024.28,“grnd\u平面”:1019.44,“湿度”:100,“temp\u-kf”:0},“天气”:“{“id”:802,“main”:“云层”,“云层”,“云层”,“云层”,“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”、“云层”}”:{“速度”:4.76,“度”:266.002},“雨”:4.54,“温度”:4.54,“最高温度”:4.54,“气压”:1016.14,“海平面”:1021.07,“地面高度”:1016.14,“湿度”:100,“温度”:0},“天气”:[“id”:800,“主”图标“晴朗”、“天空”、“晴朗”、“云层”、“所有云”{0}速度:3.37,“度”:254.504},“雨”:{},“系统”:{“pod”:“n”},“dt_txt”:“2017-12-09 18:00:00”},“城市”:{“id”:2964574,“名称”:“都柏林”,“坐标”:{“lat”:53.344,“lon”:-6.2672},“国家”:“IE”}

private void renderWeather(JSONObject json)
{
/*
//setText(json.toString());
尝试
{
JSONArray resultArray=json.getJSONArray(“列表”);
对于(int i=0;i

我尝试了代码中显示的两种方法,但都不起作用。第一种方法得到一个JSONException:No value for temp_min error。第二种方法得到一个JSONException:value error。

看看你必须处理的结构,从顶部开始:
您有一个JSONObject,它有5个字段。键“cod”包含字符串值“200”,键“message”包含数值0.4667,键“cnt”包含数值7,键“list”包含值JSONArray,键“country”包含字符串值“IE”“。这是最外层的JSON对象。因此,您需要解析键“list”中的JSONArray值。到目前为止,你还不错!但是如果您查看JSONArray中的每一个JSONObject,您将看到每个JSONObject中的第二个键“main”,它的值是另一个JSONObject!它变得更好了,因为“weather”持有一个JSONArray,其中第一个只有一个JSONObject,但作为一个数组,您可以认为它可能持有多个对象,因此您也必须迭代。这将有点复杂,但是可行的,您只需仔细查看预期的格式,并正确识别各个部分。

每当您得到无法立即理解的JSON数据块时,首先尝试通过美化器(也称为格式化程序)运行它以查看结构

我将您的JSON上载到这个唯一的JSON格式化程序中:

下面是结果。现在你可以开始理解它了

下面的轮廓块似乎代表一天。编写相应的代码来解析它


首先获取响应,如果为正,则反序列化,然后使用java语法中的json转换。

注释掉的代码应该可以工作,但temp_min值不是字符串值,而是数字。使用obj.getDouble(“temp_min”)代替obj.getString(“temp_min”);编辑:第二个代码不起作用,因为您的代码不存在
private void renderWeather(JSONObject json)
{
    /*
    //minField.setText(json.toString());

    try
    {
        JSONArray resultArray = json.getJSONArray("list");
        for(int i = 0; i < resultArray.length(); i++)
        {
            JSONObject obj = resultArray.getJSONObject(i);
            //store your variable
            String tempMin = obj.getString("temp_min");
            Log.i("TAG","Temp Min " + i + ": "+ tempMin);
        }
    }
    catch (JSONException e) {
        e.printStackTrace();
    }
    */

    String yourJsonString = json.toString();

    JSONArray jsonArray = null;
    try
    {
        jsonArray = new JSONArray(yourJsonString);

        for (int i = 0; i < jsonArray.length(); i++)
        {
            JSONObject obj1 = jsonArray.getJSONObject(i);
            JSONArray results = obj1.getJSONArray("list");
            String tempMin =  results.getJSONObject(0).getString("temp_min");
            Log.i("TAG","Temp Min " + i + ": "+ tempMin);
        }
    }

    catch (JSONException e)
    {
        e.printStackTrace();
    }
}