JSON解析之JSONObject与JSONArray的使用

来源:互联网 发布:网络优化工程师前景 编辑:程序博客网 时间:2024/06/05 10:27

一、应用场景

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<String, String> 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<Student> 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<Student> getStudents() {          return students;      }        public void setStudents(List<Student> 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<Student> list = new ArrayList<Student>();         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());}

   
原创粉丝点击