JSON4:嵌套的JsonObject與JSONArray的取值

在複雜的JSON數據的格式中,往往會對JSON數據進行嵌套,這樣取值會比之前的取值稍微複雜一點,但是隻要思路清晰,其實取法還是一樣的。就跟if else語句一樣,如果if中套if,if中再套if,寫的規範了還行,要是代碼格式不規範,那我們肯定也看着麻煩。所以啊,對於json嵌套,只要記住符號“:”前是鍵,符號後是值大括號成對找,一層層剝開,就清楚了。 舉個例子說明,如下:


從外到裏看,例子中就是一個數組,數組裏面是兩個json格式的字符串。這樣分析思路就清晰多了。

例如以下的嵌套JSON數據:

{
	    "resultcode":"200",
	    "reason":"成功的返回",
	    "result":{
		"company":"順豐",
		"com":"sf",
		"no":"575677355677",
		"list":[
		    {
			"datetime":"2013-06-25 10:44:05",
			"remark":"已收件",
			"zone":"台州市"
		    },
		    {
			"datetime":"2013-06-25 11:05:21",
			"remark":"快件在 台州 ,準備送往下一站 台州集散中心 ",
			"zone":"台州市"
		    }
		],
		"status":1
	    },
	    "error_code":0
}
那麼這種多重嵌套的JSON數據應該從何入手?

道理很簡單,每一層都當作是一個簡單JSON數據,我們來分析一下:

這裏的嵌套JSON數據,我們可以先看第一層,其實就是如下:

{
     "resultcode":"200",
     "reason":"成功的返回",
     "error_code":0
}
那麼第二層就是在第一層的裏面,其實第二層也可以看做是單獨的一層,可以看做是這樣的:

{
   "result":{
	"company":"順豐",
	"com":"sf",
	"no":"575677355677",
	"status":1
   }
} 
接下來最內的一層是JSONArray,對於這層,我們可以看成是數組的形式。

分析完上面複雜的JSON,知道怎麼獲取需要的值了嗎?

根據分析的思路,我們來一一獲取,JAVA代碼如下:

package com.json;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonObjectAndJsonArrayDemo {
	public static void main(String[] args){
		//複雜的json數據
		String jsonStr = "{\"resultcode\":\"200\",\"reason\":\"成功的返回\",\"result\":{\"company\":\"順豐\",\"com\":\"sf\","
				+ "\"no\":\"575677355677\",\"list\":[{\"datetime\":\"2013-06-25 10:44:05\",\"remark\":\"已收件\",\"zone\":\"台州市\"},"
				+ "{\"datetime\":\"2013-06-25 11:05:21\",\"remark\":\"快件在 台州 ,準備送往下一站 台州集散中心 \",\"zone\":\"台州市\"}],\"status\":1},"
				+ "\"error_code\":0}";
		JSONObject json = JSONObject.fromObject(jsonStr); //得到整個json串
		System.out.println("resultcode:"+json.getString("resultcode"));  //根據key得到value:200
		System.out.println("reason:"+json.getString("reason"));  //根據key得到value:成功的返回
		
		//當遇到result時,也是將它當成一個整體串
		System.out.println("company:"+JSONObject.fromObject(json.getString("result")).getString("company"));
		System.out.println("com:"+JSONObject.fromObject(json.getString("result")).getString("com"));
		System.out.println("no:"+JSONObject.fromObject(json.getString("result")).getString("no"));
		
		//當遇到再次嵌套時,此時的list是一個JSONArray,所以需要將其當作數組的形式處理,其實還是一個串
		//get(i)以下標爲主,裏面的東西,其實也是一個json的形式數據,你可以不看外面怎麼嵌套,按道理只當成單單一個json串處理即可
		System.out.println("list(0).datetime:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("datetime"));
		
		System.out.println("list(0).remark:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("remark"));
		
		System.out.println("list(0).zone:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("zone"));
		
		System.out.println("list(1).datetime:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("datetime"));
		
		System.out.println("list(1).remark:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("remark"));
		
		System.out.println("list(1).zone:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("zone"));
		
		System.out.println("status:"+JSONObject.fromObject(json.getString("result")).getString("status"));
		
		System.out.println("reason:"+json.getString("error_code"));
	}
}
編譯運行之後,將會得到以下結果:











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章