分享

JSON详细学习之JSONObject in JAVA

 wusiqi111 2018-03-19

 

需要依赖的jar包: commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar  ezmorph.jar json-lib-2.2.2-jdk15.jar

首先简单地看一下JSONObject,JSONArray对象的创建以及Json字符串的解析:

[java] view plain copy
  1. package com.peter.jsonobj.test;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. import net.sf.json.JSONArray;  
  7. import net.sf.json.JSONObject;  
  8.   
  9.   
  10. public class Test2 {  
  11.         public static void main(String[] args) {  
  12.             //JsonObject和JsonArray区别就是JsonObject是对象形式,JsonArray是数组形式  
  13.             //创建JsonObject第一种方法  
  14.             JSONObject jsonObject = new JSONObject();  
  15.             jsonObject.put("UserName""ZHULI");  
  16.             jsonObject.put("age""30");  
  17.             jsonObject.put("workIn""ALI");  
  18.             System.out.println("jsonObject1:" + jsonObject);  
  19.               
  20.             //创建JsonObject第二种方法  
  21.             HashMap<String, String> hashMap = new HashMap<String, String>();  
  22.             hashMap.put("UserName""ZHULI");  
  23.             hashMap.put("age""30");  
  24.             hashMap.put("workIn""ALI");  
  25.             System.out.println("jsonObject2:" + JSONObject.fromObject(hashMap));  
  26.               
  27.             //创建一个JsonArray方法1  
  28.             JSONArray jsonArray = new JSONArray();  
  29.             jsonArray.add(0"ZHULI");  
  30.             jsonArray.add(1"30");  
  31.             jsonArray.add(2"ALI");  
  32.             System.out.println("jsonArray1:" + jsonArray);  
  33.               
  34.             //创建JsonArray方法2  
  35.             ArrayList<String> arrayList = new ArrayList<String>();  
  36.             arrayList.add("ZHULI");  
  37.             arrayList.add("30");  
  38.             arrayList.add("ALI");  
  39.             System.out.println("jsonArray2:" + JSONArray.fromObject(arrayList));  
  40.               
  41.             //如果JSONArray解析一个HashMap,则会将整个对象的放进一个数组的值中  
  42.             System.out.println("jsonArray FROM HASHMAP:" + JSONArray.fromObject(hashMap));  
  43.               
  44.             //组装一个复杂的JSONArray  
  45.             JSONObject jsonObject2 = new JSONObject();  
  46.             jsonObject2.put("UserName""ZHULI");  
  47.             jsonObject2.put("age""30");  
  48.             jsonObject2.put("workIn""ALI");  
  49.             jsonObject2.element("Array", arrayList);  
  50.             System.out.println("jsonObject2:" + jsonObject2);  
  51.               
  52.               
  53.             //解析JSON字符串:  
  54.             String jsonString = "{\"UserName\":\"ZHULI\",\"age\":\"30\",\"workIn\":\"ALI\",\"Array\":[\"ZHULI\",\"30\",\"ALI\"]}";  
  55.             //将Json字符串转为java对象  
  56.             JSONObject obj = JSONObject.fromObject(jsonString);  
  57.             //获取Object中的UserName  
  58.             if (obj.has("UserName")) {  
  59.                 System.out.println("UserName:" + obj.getString("UserName"));  
  60.             }  
  61.             //获取ArrayObject  
  62.             if (obj.has("Array")) {  
  63.                 JSONArray transitListArray = obj.getJSONArray("Array");  
  64.                 for (int i = 0; i < transitListArray.size(); i++) {  
  65.                     System.out.print("Array:" + transitListArray.getString(i) + " ");  
  66.                 }  
  67.             }  
  68.         }  
  69. }  
结果如下:

jsonObject1:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
jsonObject2:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
jsonArray1:["ZHULI","30","ALI"]
jsonArray2:["ZHULI","30","ALI"]
jsonArray FROM HASHMAP:[{"workIn":"ALI","age":"30","UserName":"ZHULI"}]
jsonObject2:{"workIn":"ALI","age":"30","Array":["ZHULI","30","ALI"],"UserName":"ZHULI"}
UserName:ZHULI
Array:ZHULI Array:30 Array:ALI 


由于我们涉及更多的是对象(Bean)与Json字符串之间的转换.这里我创建了我的Model类

[java] view plain copy
  1. package com.peter.model;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7.   
  8. public class ClassInfo implements Serializable{  
  9.     private String className;  
  10.     private int  classNum;  
  11.     private Teacher teacher;  
  12.     private List<Student> students=new ArrayList<Student>();  
  13.     public String getClassName() {  
  14.         return className;  
  15.     }  
  16.     public void setClassName(String className) {  
  17.         this.className = className;  
  18.     }  
  19.       
  20.     public Teacher getTeacher() {  
  21.         return teacher;  
  22.     }  
  23.     public void setTeacher(Teacher teacher) {  
  24.         this.teacher = teacher;  
  25.     }  
  26.     public List<Student> getStudents() {  
  27.         return students;  
  28.     }  
  29.     public void setStudents(List<Student> students) {  
  30.         this.students = students;  
  31.     }  
  32.     public int getClassNum() {  
  33.         return classNum;  
  34.     }  
  35.     public void setClassNum(int classNum) {  
  36.         this.classNum = classNum;  
  37.     }  
  38.     @Override  
  39.     public String toString() {  
  40.         return "ClassInfo [className=" + className + ", classNum=" + classNum  
  41.                 + ", teacher=" + teacher + ", students=" + students + "]";  
  42.     }  
  43.       
  44. }  

[java] view plain copy
  1. package com.peter.model;  
  2. import java.io.Serializable;  
  3.   
  4. import java.util.Date;  
  5.   
  6. public class Student implements Serializable{    
  7.     private int id;    
  8.     private String name;    
  9.     private Date birthDay;    
  10.     
  11.     public int getId() {    
  12.         return id;    
  13.     }    
  14.     
  15.     public void setId(int id) {    
  16.         this.id = id;    
  17.     }    
  18.     
  19.     public String getName() {    
  20.         return name;    
  21.     }    
  22.     
  23.     public void setName(String name) {    
  24.         this.name = name;    
  25.     }    
  26.     
  27.     public Date getBirthDay() {    
  28.         return birthDay;    
  29.     }    
  30.     
  31.     public void setBirthDay(Date birthDay) {    
  32.         this.birthDay = birthDay;    
  33.     }    
  34.     
  35.     @Override    
  36.     public String toString() {    
  37.         return "Student [birthDay=" + birthDay + ", id=" + id + ", name="    
  38.                 + name + "]";    
  39.     }    
  40.     
  41. }    
[java] view plain copy
  1. <pre name="code" class="java">package com.peter.model;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Teacher implements Serializable{  
  6.         private String name;  
  7.         private String jabNum;  
  8.         public String getName() {  
  9.             return name;  
  10.         }  
  11.         public void setName(String name) {  
  12.             this.name = name;  
  13.         }  
  14.         public String getJabNum() {  
  15.             return jabNum;  
  16.         }  
  17.         public void setJabNum(String jabNum) {  
  18.             this.jabNum = jabNum;  
  19.         }  
  20.         @Override  
  21.         public String toString() {  
  22.             return "Teacher [name=" + name + ", jabNum=" + jabNum + "]";  
  23.         }  
  24.           
  25. }  

以上的model基本上能满足所有的Json字符串格式.

[java] view plain copy
  1. package com.peter.jsonobj.test;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.List;  
  7.   
  8. import net.sf.json.JSONArray;  
  9. import net.sf.json.JSONObject;  
  10. import net.sf.json.JSONSerializer;  
  11. import net.sf.json.JsonConfig;  
  12. import net.sf.json.processors.JsonValueProcessor;  
  13. import net.sf.json.util.CycleDetectionStrategy;  
  14.   
  15. import com.peter.model.ClassInfo;  
  16. import com.peter.model.Student;  
  17. import com.peter.model.Teacher;  
  18.   
  19. public class Test {  
  20.     public static void main(String[] args) {  
  21.   
  22.         Student student1 = new Student();  
  23.         student1.setId(1);  
  24.         student1.setName("李坤");  
  25.         student1.setBirthDay(new Date());  
  26.   
  27.         // //////////////////////////////////////////////////////////  
  28.         System.out.println("----------简单对象之间的转化-------------");  
  29.         // 简单的bean转为json  
  30.         // 默认日期:"birthDay":{"time":1445158142832,"minutes":49,"seconds":2,"hours":16,"month":9,"year":115,"timezoneOffset":-480,"day":0,"date":18}  
  31.         JSONObject jso = JSONObject.fromObject(student1);  
  32.         String s1 = jso.toString();  
  33.         System.out.println("(默认日期)简单Bean转化为Json===" + s1);  
  34.   
  35.         JSONObject jso1 = JSONObject.fromObject(student1, getConfig());  
  36.         s1 = jso1.toString();  
  37.         System.out.println("(设置日期)简单Bean转化为Json===" + s1);  
  38.   
  39.         // // json转为简单Bean  
  40.         JSONObject o1 = (JSONObject) JSONSerializer.toJSON(s1);  
  41.         Student student = (Student) JSONObject.toBean(o1, Student.class);  
  42.         System.out.println("Json转为简单Bean===" + student);  
  43.   
  44.         Student student2 = new Student();  
  45.         student2.setId(2);  
  46.         student2.setName("曹贵生");  
  47.         student2.setBirthDay(new Date());  
  48.   
  49.         Student student3 = new Student();  
  50.         student3.setId(3);  
  51.         student3.setName("柳波");  
  52.         student3.setBirthDay(new Date());  
  53.   
  54.         List<Student> list = new ArrayList<Student>();  
  55.         list.add(student1);  
  56.         list.add(student2);  
  57.         list.add(student3);  
  58.   
  59.         System.out.println("----------带泛型的List之间的转化-------------");  
  60.         JSONArray jary1 = JSONArray.fromObject(list, getConfig());  
  61.         // 带泛型的list转化为json  
  62.         String s2 = jary1.toString();  
  63.         System.out.println("带泛型的list转化为json==" + s2);  
  64.         // json转为带泛型的list  
  65.         // 数组  
  66.         Student[] arrList = (Student[]) JSONArray.toArray(jary1, Student.class);  
  67.   
  68.         // 集合  
  69.         @SuppressWarnings("unchecked")  
  70.         List<Student> lists = JSONArray.toList(jary1, Student.class);  
  71.         for (Student stu : arrList) {  
  72.             System.out.println(stu.getName());  
  73.         }  
  74.         for (Student stu : lists) {  
  75.             System.out.println(stu.getName());  
  76.         }  
  77.         //  
  78.         Teacher t = new Teacher();  
  79.         t.setJabNum("t101");  
  80.         t.setName("lijun");  
  81.         ClassInfo ci = new ClassInfo();  
  82.         ci.setClassName("cna");  
  83.         ci.setClassNum(101);  
  84.         ci.setStudents(list);  
  85.         ci.setTeacher(t);  
  86.         JSONObject clajso = JSONObject.fromObject(ci, getConfig());  
  87.         String c = clajso.toString();  
  88.         System.out.println("ci to json  //////////////");  
  89.         System.out.println(c);  
  90.   
  91.         System.out.println("json to ci //////////");  
  92.         JSONObject o2 = (JSONObject) JSONSerializer.toJSON(c);  
  93.         ClassInfo cijson = (ClassInfo) JSONObject.toBean(o2, ClassInfo.class);  
  94.         JSONArray array = o2.getJSONArray("students");  
  95.         System.out.println(array.size());  
  96.         for (int i = 0; i < array.size(); i++) {  
  97.             JSONObject object = (JSONObject) array.get(i);  
  98.             Student studentaa = (Student) JSONObject.toBean(object,  
  99.                     Student.class);  
  100.             cijson.getStudents().add(studentaa);  
  101.         }  
  102.         System.out.println(cijson);  
  103.   
  104.     }  
  105.   
  106.     public static JsonConfig getConfig() {  
  107.         // 设置日期格式  
  108.         JsonConfig config = new JsonConfig();  
  109.         // 防止对象间的循环引用所产生的jsonString  
  110.         config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);  
  111.         config.registerJsonValueProcessor(Date.classnew JsonValueProcessor() {  
  112.   
  113.             public Object processObjectValue(String arg0, Object arg1,  
  114.                     JsonConfig arg2) {  
  115.                 SimpleDateFormat sdf = new SimpleDateFormat(  
  116.                         "yyyy-MM-dd HH:mm:ss.SSS");  
  117.                 Date d = (Date) arg1;  
  118.                 return sdf.format(d);  
  119.             }  
  120.   
  121.             public Object processArrayValue(Object arg0, JsonConfig arg1) {  
  122.                 // TODO Auto-generated method stub  
  123.                 return null;  
  124.             }  
  125.         });  
  126.         return config;  
  127.     }  
  128. }  

结果如下:

----------简单对象之间的转化-------------
(默认日期)简单Bean转化为Json==={"id":1,"name":"李坤","birthDay":{"time":1466596005549,"minutes":46,"seconds":45,"hours":19,"month":5,"year":116,"timezoneOffset":-480,"day":3,"date":22}}
(设置日期)简单Bean转化为Json==={"id":1,"name":"李坤","birthDay":"2016-06-22 19:46:45.549"}
Json转为简单Bean===Student [birthDay=Wed Jun 22 19:46:45 CST 2016, id=1, name=李坤]
----------带泛型的List之间的转化-------------
带泛型的list转化为json==[{"id":1,"name":"李坤","birthDay":"2016-06-22 19:46:45.549"},{"id":2,"name":"曹贵生","birthDay":"2016-06-22 19:46:45.938"},{"id":3,"name":"柳波","birthDay":"2016-06-22 19:46:45.938"}]

李坤
曹贵生
柳波
李坤
曹贵生
柳波
ci to json  //////////////
{"students":[{"id":1,"name":"李坤","birthDay":"2016-06-22 19:46:45.549"},{"id":2,"name":"曹贵生","birthDay":"2016-06-22 19:46:45.938"},{"id":3,"name":"柳波","birthDay":"2016-06-22 19:46:45.938"}],"className":"cna","teacher":{"name":"lijun","jabNum":"t101"},"classNum":101}
json to ci //////////
3

ClassInfo [className=cna, classNum=101, teacher=Teacher [name=lijun, jabNum=t101], students=[net.sf.ezmorph.bean.MorphDynaBean@331ae2ce[
  {id=1, name=李坤, birthDay=2016-06-22 19:46:45.549}
], net.sf.ezmorph.bean.MorphDynaBean@36293b29[
  {id=2, name=曹贵生, birthDay=2016-06-22 19:46:45.938}
], net.sf.ezmorph.bean.MorphDynaBean@4ceb1c86[
  {id=3, name=柳波, birthDay=2016-06-22 19:46:45.938}
], Student [birthDay=Wed Jun 22 19:46:46 CST 2016, id=1, name=李坤], Student [birthDay=Wed Jun 22 19:46:46 CST 2016, id=2, name=曹贵生], Student [birthDay=Wed Jun 22 19:46:46 CST 2016, id=3, name=柳波]]]


以上的例子,相信能够解决我们大部分的问题,在此顺便提供其API,方便大家查看学习

http://json-lib./apidocs/jdk15/index.html


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多