String parameter = {
success : 0,
errorMsg : "錯誤消息",
data : {
total : "總記錄數",
rows : [ {
id : "任務ID",
workName : "任務名稱",
assigneeName : "經辦人姓名",
name : "流程步驟名稱",
processInstanceInitiatorName : "發起人",
processInstanceStartTime : "發起時間",
createTime : "到達時間",
dueDate : "截止時間"
}, {
id : "ID",
workName : "名稱",
assigneeName : "經辦人",
name : "流程",
processInstanceInitiatorName : "發起人",
processInstanceStartTime : "發起",
createTime : "到達",
dueDate : "截止"
} ]
}
};
JSONObject jsonObject =JSONObject.fromObject(parameter);
System.out.println("success:"+jsonObject.get("success"));
System.out.println("errorMsg:"+jsonObject.get("errorMsg"));
System.err.println("total:"+jsonObject.getJSONObject("data").get("total"));
JSONObject data = jsonObject.getJSONObject("data");
JSONArray jsonArray = data.getJSONArray("row");
JSONObject row = null;
for (int i = 0; i < jsonArray.size(); i++) {
row = jsonArray.getJSONObject(i);
System.out.println("id:"+row.get("id"));
System.out.println("workName:"+row.get("workName"));
System.out.println("assigneeName:"+row.get("assigneeName"));
System.out.println("name:"+row.get("name"));
System.out.println("processInstanceInitiatorName:"+row.get("processInstanceInitiatorName"));
System.out.println("processInstanceStartTime:"+row.get("processInstanceStartTime"));
System.out.println("createTime:"+row.get("createTime"));
System.out.println("dueDate:"+row.get("dueDate"));
}
在複雜的JSON數據的格式中,往往會對JSON數據進行嵌套,這樣取值會比之前的取值稍微複雜一點,但是隻要思路清晰,其實取法還是一樣的。就跟if else語句一樣,如果if中套if,if中再套if,寫的規範了還行,要是代碼格式不規範,那我們肯定也看着麻煩。所以啊,對於json嵌套,只要記住符號“:”前是鍵,符號後是值大括號成對找,一層層剝開,就清楚了。 舉個例子說明,如下:
從外到裏看,例子中就是一個數組,數組裏面是兩個json格式的字符串。這樣分析思路就清晰多了。
例如以下的嵌套JSON數據:
[java] view plain copy
- {
- "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數據,我們可以先看第一層,其實就是如下:
[java] view plain copy
- {
- "resultcode":"200",
- "reason":"成功的返回",
- "error_code":0
- }
那麼第二層就是在第一層的裏面,其實第二層也可以看做是單獨的一層,可以看做是這樣的:
[java] view plain copy
- {
- "result":{
- "company":"順豐",
- "com":"sf",
- "no":"575677355677",
- "status":1
- }
- }
接下來最內的一層是JSONArray,對於這層,我們可以看成是數組的形式。
分析完上面複雜的JSON,知道怎麼獲取需要的值了嗎?
根據分析的思路,我們來一一獲取,Java代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
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")); } } fastjson是一個比較好的工具包,使用起來也很方便。 一、 1.類,json對象轉成json字符串 [java] view plain copy |