解析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);
   }
  }

}


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM