解析Json数据

简单Json用:JSONObject   

嵌套的复杂Json用:GSON

 

JSONObject  :

 private void parseJSON(String jsonData) {
            try {
                JSONArray jsonArray = new JSONArray(jsonData);
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObject=jsonArray.getJSONObject(i);
                    String id =jsonObject.getString("ID");
                    Log.d("AA",id);
                }

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

        }

就是这么简单:

 

 

Gson 解析嵌套Json数据

 

Gson2.8.2  链接:https://pan.baidu.com/s/1eRFt9Nc 密码:41sl

Json天气数据

{
    "HeWeather6": [
        {
            "basic": {
                "cid": "CN101271506",
                "location": "青神",
                "parent_city": "眉山",
                "admin_area": "四川",
                "cnty": "中国",
                "lat": "29.83146858",
                "lon": "103.84613037",
                "tz": "+8.0"
            },
            "update": {
                "loc": "2018-01-09 08:53",
                "utc": "2018-01-09 00:53"
            },
            "status": "ok",
            "now": {
                "cloud": "5",
                "cond_code": "101",
                "cond_txt": "多云",
                "fl": "-6",
                "hum": "89",
                "pcpn": "0.0",
                "pres": "1031",
                "tmp": "0",
                "vis": "7",
                "wind_deg": "138",
                "wind_dir": "东南风",
                "wind_sc": "微风",
                "wind_spd": "6"
            },
            "daily_forecast": [
                {
                    "cond_code_d": "101",
                    "cond_code_n": "101",
                    "cond_txt_d": "多云",
                    "cond_txt_n": "多云",
                    "date": "2018-01-09",
                    "hum": "51",
                    "mr": "01:02",
                    "ms": "13:09",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1031",
                    "sr": "08:01",
                    "ss": "18:24",
                    "tmp_max": "11",
                    "tmp_min": "0",
                    "uv_index": "4",
                    "vis": "20",
                    "wind_deg": "0",
                    "wind_dir": "无持续风向",
                    "wind_sc": "微风",
                    "wind_spd": "3"
                },
                {
                    "cond_code_d": "100",
                    "cond_code_n": "101",
                    "cond_txt_d": "晴",
                    "cond_txt_n": "多云",
                    "date": "2018-01-10",
                    "hum": "46",
                    "mr": "01:58",
                    "ms": "13:45",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1033",
                    "sr": "08:01",
                    "ss": "18:25",
                    "tmp_max": "12",
                    "tmp_min": "0",
                    "uv_index": "4",
                    "vis": "20",
                    "wind_deg": "0",
                    "wind_dir": "无持续风向",
                    "wind_sc": "微风",
                    "wind_spd": "3"
                },
                {
                    "cond_code_d": "100",
                    "cond_code_n": "101",
                    "cond_txt_d": "晴",
                    "cond_txt_n": "多云",
                    "date": "2018-01-11",
                    "hum": "45",
                    "mr": "02:52",
                    "ms": "14:20",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1032",
                    "sr": "08:01",
                    "ss": "18:25",
                    "tmp_max": "11",
                    "tmp_min": "0",
                    "uv_index": "4",
                    "vis": "20",
                    "wind_deg": "0",
                    "wind_dir": "无持续风向",
                    "wind_sc": "微风",
                    "wind_spd": "3"
                }
            ],
            "hourly": [
                {
                    "cloud": "7",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-5",
                    "hum": "46",
                    "pop": "0",
                    "pres": "1033",
                    "time": "2018-01-09 10:00",
                    "tmp": "1",
                    "wind_deg": "48",
                    "wind_dir": "东北风",
                    "wind_sc": "微风",
                    "wind_spd": "3"
                },
                {
                    "cloud": "5",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-7",
                    "hum": "32",
                    "pop": "0",
                    "pres": "1030",
                    "time": "2018-01-09 13:00",
                    "tmp": "4",
                    "wind_deg": "81",
                    "wind_dir": "东风",
                    "wind_sc": "微风",
                    "wind_spd": "5"
                },
                {
                    "cloud": "4",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-7",
                    "hum": "28",
                    "pop": "0",
                    "pres": "1028",
                    "time": "2018-01-09 16:00",
                    "tmp": "10",
                    "wind_deg": "100",
                    "wind_dir": "东风",
                    "wind_sc": "微风",
                    "wind_spd": "4"
                },
                {
                    "cloud": "6",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-5",
                    "hum": "37",
                    "pop": "0",
                    "pres": "1032",
                    "time": "2018-01-09 19:00",
                    "tmp": "8",
                    "wind_deg": "223",
                    "wind_dir": "西南风",
                    "wind_sc": "微风",
                    "wind_spd": "4"
                },
                {
                    "cloud": "7",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-5",
                    "hum": "45",
                    "pop": "0",
                    "pres": "1036",
                    "time": "2018-01-09 22:00",
                    "tmp": "3",
                    "wind_deg": "335",
                    "wind_dir": "西北风",
                    "wind_sc": "微风",
                    "wind_spd": "7"
                },
                {
                    "cloud": "4",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-4",
                    "hum": "53",
                    "pop": "0",
                    "pres": "1035",
                    "time": "2018-01-10 01:00",
                    "tmp": "2",
                    "wind_deg": "355",
                    "wind_dir": "北风",
                    "wind_sc": "微风",
                    "wind_spd": "4"
                },
                {
                    "cloud": "5",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-4",
                    "hum": "57",
                    "pop": "0",
                    "pres": "1033",
                    "time": "2018-01-10 04:00",
                    "tmp": "0",
                    "wind_deg": "142",
                    "wind_dir": "东南风",
                    "wind_sc": "微风",
                    "wind_spd": "2"
                },
                {
                    "cloud": "5",
                    "cond_code": "103",
                    "cond_txt": "晴间多云",
                    "dew": "-5",
                    "hum": "58",
                    "pop": "0",
                    "pres": "1034",
                    "time": "2018-01-10 07:00",
                    "tmp": "0",
                    "wind_deg": "41",
                    "wind_dir": "东北风",
                    "wind_sc": "微风",
                    "wind_spd": "3"
                }
            ],
            "lifestyle": [
                {
                    "brf": "较舒适",
                    "txt": "白天虽然天气晴好,但早晚会感觉偏凉,午后舒适、宜人。",
                    "type": "comf"
                },
                {
                    "brf": "较冷",
                    "txt": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。",
                    "type": "drsg"
                },
                {
                    "brf": "易发",
                    "txt": "昼夜温差很大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。",
                    "type": "flu"
                },
                {
                    "brf": "较适宜",
                    "txt": "天气较好,无雨水困扰,较适宜进行各种运动,但因气温较低,在户外运动请注意增减衣物。",
                    "type": "sport"
                },
                {
                    "brf": "适宜",
                    "txt": "天气较好,但丝毫不会影响您出行的心情。温度适宜又有微风相伴,适宜旅游。",
                    "type": "trav"
                },
                {
                    "brf": "最弱",
                    "txt": "属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。",
                    "type": "uv"
                },
                {
                    "brf": "较适宜",
                    "txt": "较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。",
                    "type": "cw"
                },
                {
                    "brf": "较差",
                    "txt": "气象条件较不利于空气污染物稀释、扩散和清除,请适当减少室外活动时间。",
                    "type": "air"
                }
            ],
            "air_now_city": {
                "aqi": "73",
                "qlty": "良",
                "main": "PM2.5",
                "pm25": "53",
                "pm10": "83",
                "no2": "33",
                "so2": "6",
                "co": "0.8",
                "o3": "22",
                "pub_time": "2018-01-09 07:30"
            }
        }
    ]
}

 

创建对应的实体类(SerializedName是Json数据的名,下面是对应的自定义名

/**
 * 基本信息
 */
public class BasicJson {

    @SerializedName("cid")
    public String CityWeatherID;   ///城市和风天气ID

    @SerializedName("location")
    public String CityName;        //城市名称

    @SerializedName("parent_city")
    public String Parent_City;        //城市的上级城市

    @SerializedName("admin_area")
    public String Admin_Area;        //城市所属行政区域

    @SerializedName("cnty")
    public String Cnty;        //城市所属国家名称

    @SerializedName("lat")
    public String Lat;        //城市经度

    @SerializedName("lon")
    public String Lon;        //城市纬度

    @SerializedName("tz")
    public String Tz;        //城市所在时区


}

 

public class LifeStyleJson {

    @SerializedName("brf")
    public String Brf;           ///生活指数简介

    @SerializedName("txt")
    public String Txt;           ///生活指数详细描述


    ///生活指数类型 comf:舒适度指数、cw:洗车指数、drsg:穿衣指数、
    ///flu:感冒指数、sport:运动指数、trav:旅游指数、uv:紫外线指数、air:空气污染扩散条件指数
    @SerializedName("type")
    public String Type;


}

 

按照以上两个创建对应的实体就行

 

再加一个Json总的实体(如上面的LifeStyleJson ,是个集合则在下面总实体类中用List声明)

public class ListJson {

    @SerializedName("basic")
    public BasicJson Basic;         ///城市信息

    @SerializedName("update")
    public UpdateJson Update;       ///更新时间

    @SerializedName("status")
    public String Status;           ///状态码


    @SerializedName("now")
    public WeatherJson Now;            ///实况天气

    @SerializedName("daily_forecast")
    public List<DailyForecastJson> DailyForecast;    ///3天天气预报

    @SerializedName("hourly")
    public List<HourJson> HourLy;

    @SerializedName("lifestyle")
    public List<LifeStyleJson> LifeStyle; ///生活指数


    @SerializedName("air_now_city")
    public AQIJson AirNowCity;      ///空气质量实况

 

创建解析方法

public static ListJson HandleWeatherResponse(String ResponseStr) {
        try {
            JSONObject WeatherJsonList = new JSONObject(ResponseStr);
            JSONArray WeatherArray = WeatherJsonList.getJSONArray("HeWeather6");
            String WeatherContent = WeatherArray.getJSONObject(0).toString();
            return new Gson().fromJson(WeatherContent, ListJson.class);     //转换成Json对象

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

 

提取数据

//展示数据
    public void ShowWeatherInfo(ListJson Weatherobject) {
        if (Weatherobject != null && "ok".equals(Weatherobject.Status)) {
            String Name = Weatherobject.Basic.CityName;    
            String UpdateTime = Weatherobject.Update.Utc;
            String Degree = Weatherobject.Now.Tmp + "℃";
            String Cond = Weatherobject.Now.CondTxt;

        //集合数据
for (DailyForecastJson Forecast : Weatherobject.DailyForecast) {
          DateTxt.setText(Forecast.Date);
          WeatherInfo.setText(Forecast.CondTxtD);
          MaxTxt.setText(Forecast.TmpMax);
          MinTxt.setText(Forecast.TmpMin);
        } 

        if (Weatherobject.AirNowCity.Aqi != null) {
  AqiTxt.setText(Weatherobject.AirNowCity.Aqi);
  Pm25Txt.setText(Weatherobject.AirNowCity.Pm25);
   }

   for (LifeStyleJson Life : Weatherobject.LifeStyle) {
   if (Life.Type.equals("comf")) {
   String Comfort = "舒适度:" + Life.Txt;
   ComfTxt.setText(Comfort);
   }
  }

}


 

posted @ 2018-01-09 10:01  XinYiBuFang  阅读(1379)  评论(0编辑  收藏  举报