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