1. 程式人生 > >java解析複雜json資料

java解析複雜json資料

java如何解析複雜的json資料

關於json處理的包有好幾個,比如jackson、Gson、Fastjson。Gson是谷歌做的,功能強大;Fastjson是阿里巴巴做的,效能更快。具體用哪個,開心就好。我這裡兩個都沒用,用的是java的一個類庫—json-lib。如果你用的是maven構建的專案,新增依賴請注意加上JDK版本15,詳情請戳這裡 ok,多的不說了,讓我們直接來解析一個複雜的json資料吧,如下:

String weather = {
    "HeWeather6": [
        {
            "basic": {
                "cid": "CN101010100",
                "location": "北京",
                "parent_city": "北京",
                "admin_area": "北京",
                "cnty": "中國",
                "lat": "39.90498734",
                "lon": "116.40528870",
                "tz": "8.0"
            },
            "daily_forecast": [
                {
                    "cond_code_d": "103",
                    "cond_code_n": "101",
                    "cond_txt_d": "晴間多雲",
                    "cond_txt_n": "多雲",
                    "date": "2017-10-26",
                    "hum": "57",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1020",
                    "tmp_max": "16",
                    "tmp_min": "8",
                    "uv_index": "3",
                    "vis": "16",
                    "wind_deg": "0",
                    "wind_dir": "無持續風向",
                    "wind_sc": "微風",
                    "wind_spd": "5"
                },
                {
                    "cond_code_d": "101",
                    "cond_code_n": "501",
                    "cond_txt_d": "多雲",
                    "cond_txt_n": "霧",
                    "date": "2017-10-27",
                    "hum": "56",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1018",
                    "tmp_max": "18",
                    "tmp_min": "9",
                    "uv_index": "3",
                    "vis": "20",
                    "wind_deg": "187",
                    "wind_dir": "南風",
                    "wind_sc": "微風",
                    "wind_spd": "6"
                },
                {
                    "cond_code_d": "101",
                    "cond_code_n": "101",
                    "cond_txt_d": "多雲",
                    "cond_txt_n": "多雲",
                    "date": "2017-10-28",
                    "hum": "26",
                    "pcpn": "0.0",
                    "pop": "0",
                    "pres": "1029",
                    "tmp_max": "17",
                    "tmp_min": "5",
                    "uv_index": "2",
                    "vis": "20",
                    "wind_deg": "2",
                    "wind_dir": "北風",
                    "wind_sc": "3-4",
                    "wind_spd": "19"
                }
            ],
            "status": "ok",
            "update": {
                "loc": "2017-10-26 23:09",
                "utc": "2017-10-26 15:09"
            }
        }
    ]
}

這裡請先將json資料轉換成json字串,直接.toString()即可 解析之前,先簡單分析一下該json的結構: 首先,最外層是一個{},裡面只有一個key是"HeWeather6",對應的value是[],顯然是一個數組; 然後,第二層也就是第一層的value。該層由一個{}組成,{}裡面有4對key-value,分別是:

"basic": {...}
"daily_forecast" : [...]
"status":"ok"
"upate": {...}

第3對資料就不用多說了,第1和第4對資料也很清晰了,key對應的value都是簡單的json資料; 所以,唯一需要再往裡分析的就是第2對資料了,其對應的value是[],顯然又是一個數組。數組裡面也很明瞭了,也都是簡單的json資料。 ps:我這裡簡單的json資料,指的是key-value都是簡單的字串,沒有其他複雜的資料結構。 到此,分析完畢!哇哦,是不是發現解析複雜的json資料就像剝洋蔥一樣,一層一層的往裡剝,其實也很簡單!只要學會了分析,有點耐心,就算再複雜的json資料也能把它給接觸出來~ 最後,上程式碼,如下(解釋我全都會寫在註釋裡面,就不再解釋什麼啦):

		JSONObject jsonObject = JSONObject.fromObject(weather);
		//獲取第二層的陣列,將其轉換成JSONArray,對應的key為HeWeather6
        JSONArray jsonArray = jsonObject.getJSONArray("HeWeather6");
        
        //獲取JSONArray 裡面的資料,因為jsonArray裡面只有一個數據(一個{}),所以獲取value值的角標為0
        JSONObject jsonObject2 = jsonArray.getJSONObject(0);
		
		//獲取4對資料的value,這裡先獲取最簡單的第3對資料的值  列印"three"可得 -> ok
		String three= jsonObject2.get("status").toString();
       
       //然後獲取第1對資料的值,先獲取對應的json  然後獲取json裡面的value值
		JSONObject one = jsonObject2.getJSONObject("basic");
        String oneCid = two.get("cid").toString();			
       
       //列印oneCid可得 -> CN101010100 其他以此類推,第4對資料同理,就不再贅述了
       //最後獲取第2對資料的value值  思路:先獲取陣列,然後遍歷,分別拿到裡面的值
        JSONArray twos = jsonObject2.getJSONArray("daily_forecast");
        JSONObject two = null;
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        for (int i = 0; i < twos.size(); i++) {
            two = twos.getJSONObject(i);
            Map<String, String> map = new HashMap<String, String>();
            map.put("天氣情況", twos.get("cond_txt_d").toString());
            map.put("最高溫度", twos.get("tmp_max").toString());
            map.put("風力情況", twos.get("wind_sc").toString());
            list.add(map);
        }
        System.out.println(list.toString());

完成!!! 我希望逢著一個 撐著油紙傘的姑娘~