JSON解析之JSONObject与JSONArray的使用

一、应用场景

1.后台的java类,如实体类、List、Set、Map转成json字符串发送到前端或其他项目
2.前端或者其它项目发送过来的json字符串,需要解析成实体类、List、Set、Map等java类

二、依赖JAR包

json-lib包是可以将beans,collections,maps,arrays等类与XML和JSON格式相互转换的功能包。JSONObject和JSONArray的正常使用需要如下jar包:

      1.commons-lang.jar

      2.commons-beanutils.jar

      3.commons-collections.jar

      4.commons-logging.jar 

      5.ezmorph.jar

      6.json-lib-XXX-jdk15.jar

      JSONObject 在线API:http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/JSONObject.html

二、JSONObject和JSONArray的简单介绍

   
     JSONObject常用方法

      accumulate(String key, Object value) :如果对象中已经存在key-value1对,该方法执行后key的value新值积累为                                                                        一个数组[value1,value]。

      discard(String key):如果key值存在,删除对应的key-value.

      element(String key, boolean value) :若对象中已经存在key-value对,该方法执行后value新值代替原先的value值.

      fromBean(Object bean):静态方法,通过一个pojo对象创建一个JSONObject对象

      fromJSONObject(JSONObject object):静态方法,通过另外一个JSONObject对象构造一个JSONObject对象

      fromJSONString(JSONString string):静态方法,通过一个JSONString创建一个JSONObject对象

      toString():把JSONObject对象转换为json格式的字符串

        

三、JSONObject类的简单使用

       // 创建一个空的JSONObject对象
       JSONObject json = new JSONObject();
       // accumulate方法, 附加key值后成为一个数组
       json.accumulate("key1", 5);
       json.accumulate("key1", "heloo");
       // 创建一个map对象
       Map map = new HashMap<>();
       map.put("key3", "hello");
       map.put("key4", "system");
       // map值附加在json值后面
       json.accumulateAll(map);
       // element方法, 代替
       json.element("key2", 12);
       json.element("key2", "value2");
       // 构建更加复杂的json
       String strd = "{user:{userId:123566, uname:'jack', books:{book1:'spring', book2: 'springmvc'}}}";
       // 字符串转换为JSONObject对象
       JSONObject obj = JSONObject.fromObject(strd);
       // 再将obj添加到json对象中
       json.element("key23", obj);
       // 解析json对象
       String nn = json.getJSONObject("key23").getJSONObject("user").getString("uname");
       System.out.println(nn);

四、实体类和集合的序列化与反序列化


Student类:
public class Student {
	    private String name;  
	    private String gender;  
	    private String address;  
	  
	    public String getName() {  
	        return name;  
	    }  
	  
	    public void setName(String name) {  
	        this.name = name;  
	    }  
	  
	    public String getGender() {  
	        return gender;  
	    }  
	  
	    public void setGender(String gender) {  
	        this.gender = gender;  
	    }  
	  
	    public String getAddress() {  
	        return address;  
	    }  
	  
	    public void setAddress(String address) {  
	        this.address = address;  
	    }  
}

Class类:
public class Class {
	    private String classNum;  
	    private String className;  
	    private String way;  
	    private Student student;
	    private List students;  
	  
	    public String getClassNum() {  
	        return classNum;  
	    }  
	  
	    public void setClassNum(String classNum) {  
	        this.classNum = classNum;  
	    }  
	  
	    public String getClassName() {  
	        return className;  
	    }  
	  
	    public void setClassName(String className) {  
	        this.className = className;  
	    }  
	  
	    public String getWay() {  
	        return way;  
	    }  
	  
	    public void setWay(String way) {  
	        this.way = way;  
	    }  
	  
	    public List getStudents() {  
	        return students;  
	    }  
	  
	    public void setStudents(List students) {  
	        this.students = students;  
	    }

	    public Student getStudent() {
		return student;
	    }

            public void setStudent(Student student) {
		this.student = student;
	    }  
	      
}

序列化和反序列化过程:
public static void main(String[] args){
	Student st = new Student();
	st.setAddress("上海");
	st.setName("wanda");
	st.setGender("男");
		
	Student st1 = new Student();
	st1.setAddress("北京");
	st1.setName("youku");
	st1.setGender("女");
		
	Class cl = new Class();
	cl.setClassName("高三二班");
	cl.setClassNum("2334");
        cl.setStudent(st);
        
        List list = new ArrayList(); 
        list.add(st);
        list.add(st1);
        cl.setStudents(list);
        
        // *************JSONObject对实体类进行序列化和反序列化********************************
        // 实体类的序列化:首先对实体类进行序列化成json格式数据,再转化为字符串,该字符串一般会发给前端/其他项目
	JSONObject job = JSONObject.fromObject(cl);
	String res = job.toString();
	System.out.println(res);
		
	// 实体类的反序列化:首先将json格式字符串转换为JSONObject对象
	JSONObject js = JSONObject.fromObject(res);
	// 再将JSONObject对象转换为实体类格式
	Class ne = (Class) JSONObject.toBean(js, Class.class);
	// 检测一下
	System.out.println(ne.getStudents().toString());
		
	// *************JSONArray对集合进行序列化和反序列化********************************
	// 对集合进行序列化:首先对集合进行序列化成JSONArray格式数据,再转化为字符串
	JSONArray ja = JSONArray.fromObject(list);
	String liststr = ja.toString();
	System.out.println(liststr);
		
	// 反序列化:如果集合存储的是bean类,需要指定class属性
	JSONArray ss = JSONArray.fromObject(liststr);
	Student[] s = (Student[]) JSONArray.toArray(ss, Student.class);
	System.out.println(s.toString());
	}

   

你可能感兴趣的:(Java)