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);  

 

转载于:https://my.oschina.net/mellen/blog/1831945

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值