json解析

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

 

  1. {  
  2.         "resultcode":"200",  
  3.         "reason":"成功的返回",  
  4.         "result":{  
  5.         "company":"順豐",  
  6.         "com":"sf",  
  7.         "no":"575677355677",  
  8.         "list":[  
  9.             {  
  10.             "datetime":"2013-06-25 10:44:05",  
  11.             "remark":"已收件",  
  12.             "zone":"台州市"  
  13.             },  
  14.             {  
  15.             "datetime":"2013-06-25 11:05:21",  
  16.             "remark":"快件在 台州 ,準備送往下一站 台州集散中心 ",  
  17.             "zone":"台州市"  
  18.             }  
  19.         ],  
  20.         "status":1  
  21.         },  
  22.         "error_code":0  
  23. }  

那麼這種多重嵌套的JSON數據應該從何入手?

 

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

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

 

[java] view plain copy

 

  1. {  
  2.      "resultcode":"200",  
  3.      "reason":"成功的返回",  
  4.      "error_code":0  
  5. }  

那麼第二層就是在第一層的裏面,其實第二層也可以看做是單獨的一層,可以看做是這樣的:

 

 

[java] view plain copy

 

  1. {  
  2.    "result":{  
  3.     "company":"順豐",  
  4.     "com":"sf",  
  5.     "no":"575677355677",  
  6.     "status":1  
  7.    }  
  8. }   

接下來最內的一層是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

 

  1. JSONObject json = new JSONObject();  
  2. json.put("page",1);  
  3. json.put("pageSize",10);  
  4. json.toJSONString();  
還有Map集合在放進JSONObject,變成json字符串

[java] view plain copy

 

  1. Map<T,T> map = new HashMap<T,T>();  
  2. map.put("page",1);  
  3. map.put("pageSize",10);  
  4. json.putAll(map);  
  5. json.toJSONString();   

將一個類變成一個json類型的字符串

[java] view plain copy

 

  1. JSONObject.toJSONString(object);  
  2. JSON.toJSONString(object)  

 

二、

 

1.在json變成雷對象之前先學會得到一個jsonObject中的某個數據的值

   

[java] view plain copy

 

  1. JSONOnject obj = new JSONObject();  
  2. //如果我們需要判斷json中是否包含這個鍵值對,  
  3. (1).boolean b = obj.containKey("key");  
  4. (2).String res = obj.getString("key");  
  5.     if (res != null) {  
  6.         System.out.println(res);  
  7.     }  
  8.  //如果想繼續得到JSONObject  
  9. JSONObject obj1 =obj.getJSONObject(str2);  
  10. //如果想繼續得到值爲字符串鍵值對;  
  11. String jsonStr = obj.getString("");  
  12. //如果是得到Object,適合得到對應的值,下面沒有數據  
  13. Onject obj2 = obj.get(str2);   
  14. //如果知道對應值得類型,還可以直接得到該類型的數據,基本類型必須是它的包裝類,舉例  
  15. int num = obj.getInteger("num");  
  16. String s2 = obj.getBoolean("name");  
 

 

2.json字符串變成一個類對象,要求字符串必須符合json格式

 

[java] view plain copy

 

  1. JSONObject json = JSONObject.parseObject(str)  

後面都是在json類型的字符串已經轉出JSONObject的基礎上。

 

[java] view plain copy

 

  1. Object o = JSON.toJavaObject(json,Object.class);  
  2. Object o = json.toJavaObject(Object.class);(二選一)  

[java] view plain copy

 

  1. 得到List集合的兩種方法。  
  2. JSONArray jsonArr = json.getJSONArray("");(從JSONObject得到JSONArray對象)  
  3. List<T> list = jsonArr.toJavaList(T.class);  

如果本身是數組形式的字符串可以使用下面的方法

[java] view plain copy

 

  1. List<T.class> list = JSON.parseArray(str,T.class);  

fastjson是一個比較好的工具包,使用起來也很方便。

一、

1.類,json對象轉成json字符串

 

[java] view plain copy

 

  1. JSONObject json = new JSONObject();  
  2. json.put("page",1);  
  3. json.put("pageSize",10);  
  4. json.toJSONString();  
還有Map集合在放進JSONObject,變成json字符串

[java] view plain copy

 

  1. Map<T,T> map = new HashMap<T,T>();  
  2. map.put("page",1);  
  3. map.put("pageSize",10);  
  4. json.putAll(map);  
  5. json.toJSONString();   

將一個類變成一個json類型的字符串

[java] view plain copy

 

  1. JSONObject.toJSONString(object);  
  2. JSON.toJSONString(object)  

 

二、

 

1.在json變成雷對象之前先學會得到一個jsonObject中的某個數據的值

   

[java] view plain copy

 

  1. JSONOnject obj = new JSONObject();  
  2. //如果我們需要判斷json中是否包含這個鍵值對,  
  3. (1).boolean b = obj.containKey("key");  
  4. (2).String res = obj.getString("key");  
  5.     if (res != null) {  
  6.         System.out.println(res);  
  7.     }  
  8.  //如果想繼續得到JSONObject  
  9. JSONObject obj1 =obj.getJSONObject(str2);  
  10. //如果想繼續得到值爲字符串鍵值對;  
  11. String jsonStr = obj.getString("");  
  12. //如果是得到Object,適合得到對應的值,下面沒有數據  
  13. Onject obj2 = obj.get(str2);   
  14. //如果知道對應值得類型,還可以直接得到該類型的數據,基本類型必須是它的包裝類,舉例  
  15. int num = obj.getInteger("num");  
  16. String s2 = obj.getBoolean("name");  
 

 

2.json字符串變成一個類對象,要求字符串必須符合json格式

 

[java] view plain copy

 

  1. JSONObject json = JSONObject.parseObject(str)  

後面都是在json類型的字符串已經轉出JSONObject的基礎上。

 

[java] view plain copy

 

  1. Object o = JSON.toJavaObject(json,Object.class);  
  2. Object o = json.toJavaObject(Object.class);(二選一)  

[java] view plain copy

 

  1. 得到List集合的兩種方法。  
  2. JSONArray jsonArr = json.getJSONArray("");(從JSONObject得到JSONArray對象)  
  3. List<T> list = jsonArr.toJavaList(T.class);  

如果本身是數組形式的字符串可以使用下面的方法

[java] view plain copy

 

  1. List<T.class> list = JSON.parseArray(str,T.class);  

 

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