JSON解析工具-json-lib 解读

一、简介 

json-lib是一个Java类库,提供将Java对象,包括beans,maps,collections,java arrays和xml等转换成JSON,或者反向转换的功能 

二、准备 

在使用json-lib之前,我们应该到官方网址下载如下包 

  • jakarta commons-lang 2.5 

  • jakarta commons-beanutils 1.8.0 

  • jakarta commons-collections 3.2.1 

  • jakarta commons-logging 1.1.1 

  • ezmorph 1.0.6 

并将这些jar包引入到Eclipse项目当中,即可调用 

三、讲解 

在进行下面的代码演示之前,我们先将几个基本的类介绍一下 

MyBean类 

  1. public class MyBean {   
  2.     private String id = null;   
  3.     private String name = null;   
  4. ᅠ ᅠ private Date date = null;   
  5. ᅠ ᅠ private List cardNum = null;   
  6.     private String[] cardType = {"身份证""银行卡" , "公车卡"};   
  7.    
  8. ᅠ ᅠ public String getId() {   
  9.         return id;   
  10.     }   
  11. ᅠ ᅠ public void setId(String id) {   
  12.         this.id = id;   
  13.     }   
  14.     public String getName() {   
  15.         return name;   
  16.     }   
  17. ᅠ ᅠ public void setName(String name) {   
  18.         this.name = name;   
  19.     }   
  20. ᅠ ᅠ public Date getDate() {   
  21.         return date;   
  22.     }   
  23. ᅠ ᅠ public void setDate(Date date) {   
  24.         this.date = date;   
  25.     }   
  26. ᅠ ᅠ public List getCardNum() {   
  27. ᅠ ᅠ ᅠ ᅠ return cardNum;   
  28.     }   
  29. ᅠ ᅠ public void setCardNum(List cardNum) {   
  30. ᅠ ᅠ ᅠ ᅠ this.cardNum = cardNum;   
  31.     }   
  32. ᅠ ᅠ public String[] getCardType() {   
  33. ᅠ ᅠ ᅠ ᅠ return cardType;   
  34.     }   
  35. ᅠ ᅠ public void setCardType(String[] cardType) {   
  36.          this.cardType = cardType;   
  37.     }   
  38. }   

Person类 

  1. public class Person {   
  2.     private String name = null;   
  3.     public Person(){   
  4.     }   
  5.     public Person(String name){   
  6.         this.name = name;   
  7.     }   
  8. ᅠ ᅠ public String getName() {   
  9.         return name;   
  10.     }   
  11. ᅠ ᅠ public void setName(String name) {   
  12.         this.name = name;   
  13.     }   
  14. }   
  15.    
  16. MyBeanWithPerson类:   
  17. public class MyBeanWithPerson {   
  18.     private List<Person> list = null;   
  19. ᅠ ᅠ private Map<String,Person> map = null;   
  20. ᅠ ᅠ public List getList() {   
  21.         return list;   
  22.     }   
  23. ᅠ ᅠ public void setList(List list) {   
  24.         this.list = list;   
  25.     }   
  26. ᅠ ᅠ public Map getMap() {   
  27.         return map;   
  28.     }   
  29. ᅠ ᅠ public void setMap(Map map) {   
  30.         this.map = map;   
  31.     }   
  32. }   

1.将json字符串转换成JSON,根据情况用JSONArray或JSONObject 

  1. public static void testJsonStrToJSON() {   
  2.     JSONArray jsonArray = JSONArray.fromObject("[\"json\",\"is\",\"easy\"]");   
  3. ᅠ ᅠ System.out.println(jsonArray);   
  4. }   

2.将Java Bean转换成JSON对象 

  1. public static void testBeadToJSON() {   
  2.     MyBean bean = new MyBean();   
  3.     bean.setId("001");   
  4.     bean.setName("银行卡");   
  5.     bean.setDate(new Date());   
  6.    
  7. ᅠ ᅠ List cardNum = new ArrayList();   
  8.     cardNum.add("农行");   
  9.     cardNum.add("工行");   
  10.     cardNum.add("建行");   
  11.     cardNum.add(new Person("test"));   
  12.    
  13. ᅠ ᅠ bean.setCardNum(cardNum);   
  14.    
  15. ᅠ ᅠ JSONObject jsonObject = JSONObject.fromObject(bean);   
  16. ᅠ ᅠ System.out.println(jsonObject);   
  17. }   

3.将一般的数组转换成JSON 

  1. public static void testArrayToJSON() {   
  2.     boolean[] boolArray = new boolean[] { truefalsetrue };   
  3.     JSONArray jsonArray = JSONArray.fromObject(boolArray);   
  4.     System.out.println(jsonArray);   
  5. }   

4.将Collection对象转换成JSON 

  1. public static void testListToJSON() {   
  2.     List list = new ArrayList();   
  3.     list.add("first");   
  4.     list.add("second");   
  5. ᅠ ᅠ JSONArray jsonArray = JSONArray.fromObject(list);   
  6. ᅠ ᅠ System.out.println(jsonArray);   
  7. } <span style="font-family: Simsun; font-size: 15.555556297302246px;"> </span>  

5.将Map转换成JSON 

  1. public static void testMapToJSON() {   
  2.     Map map = new HashMap();   
  3.     map.put("name""json");   
  4.     map.put("bool", Boolean.TRUE);   
  5.     map.put("int"new Integer(1));   
  6.     map.put("arr"new String[] { "a""b" });   
  7.     map.put("func""function(i){ return this.arr[i]; }");   
  8.    
  9. ᅠ ᅠ JSONObject jsonObject = JSONObject.fromObject(map);   
  10. ᅠ ᅠ System.out.println(jsonObject);   
  11. }   

6.将普通类型的JSON字符串转换成JSON 

  1. public static void testJSONToObject() throws Exception {   
  2.     // 将JSon字符串转换成JsonObject对象   
  3.     String json = "{name=\"json\",bool:true,int:1,double:2.2,func:\"function(a){ return a; }\",array:[1,2]}";   
  4.     JSONObject jsonObject = JSONObject.fromObject(json);   
  5.     System.out.println(jsonObject);   
  6.    
  7.      // 将JsonObject对象转换成JavaBean对象   
  8.     Object bean = JSONObject.toBean(jsonObject);   
  9. ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "name"));   
  10. ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "bool"));   
  11. ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "int"));   
  12.     System.out.println(PropertyUtils.getProperty(bean, "double"));   
  13. ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "func"));   
  14. ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "array"));   
  15. ᅠ ᅠ List arrayList = (List) JSONArray.toCollection(jsonObject.getJSONArray("array"));   
  16. ᅠ ᅠ for (Object object : arrayList) {   
  17.         System.out.println(object);   
  18.     }   
  19. } <span style="font-family: Simsun; font-size: 15.555556297302246px;"> </span>  

7.将复合类型的JSON字符串转换成复合对象,包含List 

  1. public static void testJSONToBeanHavaList() {   
  2.     String json = "{list:[{name:\"test1\"},{name:\"test2\"}]}";   
  3.     Map classMap = new HashMap();   
  4.     classMap.put("list", Person.class);   
  5. ᅠ ᅠ MyBeanWithPerson diyBean = (MyBeanWithPerson) JSONObject.toBean(   
  6. ᅠ ᅠ JSONObject.fromObject(json), MyBeanWithPerson.class, classMap);   
  7. ᅠ ᅠ System.out.println(diyBean);   
  8.    
  9. ᅠ ᅠ List list = diyBean.getList();   
  10.     for (Object o : list) {   
  11.         if (o instanceof Person) {   
  12.             Person p = (Person) o;   
  13. ᅠ ᅠ ᅠ ᅠ ᅠ ᅠ System.out.println(p.getName());   
  14.         }   
  15.     }   
  16. }   

8.将复合类型的JSON字符串转换成复合对象,包含Map 

  1. public static void testJSONToBeanHavaMap() {   
  2.     // 把Map看成一个对象   
  3.     String json = "{list:[{name:\"test1\"},{name:\"test2\"}],map:{test1:{name:\"test1\"},test2:{name:\"test2\"}}}";   
  4.     Map classMap = new HashMap();   
  5.     classMap.put("list", Person.class);   
  6.     classMap.put("map", Map.class);   
  7.     // 使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析   
  8.     MyBeanWithPerson diyBean =(MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json), MyBeanWithPerson.class, classMap);   
  9. ᅠ ᅠ System.out.println(diyBean);   
  10.    
  11. ᅠ ᅠ System.out.println("do the list release");   
  12.     List<Person> list = diyBean.getList();   
  13.     for (Person o : list) {   
  14.         Person p = (Person) o;   
  15. ᅠ ᅠ ᅠ ᅠ System.out.println(p.getName());   
  16.     }   
  17.    
  18. ᅠ ᅠ System.out.println("do the map release");   
  19.     // 先往注册器中注册变换器,需要用到ezmorph包中的类   
  20.     MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();   
  21. ᅠ ᅠ Morpher dynaMorpher = new BeanMorpher(Person.class, morpherRegistry);   
  22.     morpherRegistry.registerMorpher(dynaMorpher);   
  23.    
  24. ᅠ ᅠ Map map = diyBean.getMap();   
  25.     //这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象   
  26. ᅠ ᅠ System.out.println(map);   
  27. ᅠ ᅠ ᅠList<Person> output = new ArrayList();   
  28. ᅠ ᅠ for (Iterator i = map.values().iterator(); i.hasNext();) {   
  29.         // 使用注册器对指定DynaBean进行对象变换   
  30.         output.add((Person) morpherRegistry.morph(Person.class, i.next()));   
  31.     }   
  32.    
  33.     for (Person p : output) {   
  34. ᅠ ᅠ ᅠ ᅠ System.out.println(p.getName());   
  35.     }   
  36. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值