JSON解析之JSONObject与JSONArray的使用
2017-05-26 00:43
423 查看
一、应用场景
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()); }
相关文章推荐
- Android-json解析(三):原生JSONObject+JSONArray的使用
- 关于SAXReader解析XML以及JSONObject和JSONArray的使用总结
- json 的解析-使用Android中的JSONObject和JSONArray解析json数据
- JSONObject与JSONArray的使用-解析Json
- Java基础系列16:使用JSONObject和JSONArray解析和构造json字符串
- 复杂json的解析:jsonobject与jsonArray的使用
- Android-json解析:原生JSONObject+JSONArray的使用
- org.JSONObeject,org.JSONArray,net.sf.JSONObject方法的使用,用java解析json数据的方法
- 使用JSONObject解析json串,JSONArray解析json
- json 的解析-使用Android中的JSONObject和JSONArray解析json数据,gson中的JsonReader解析json数据
- 使用JSONObject和JSONArray 进行Json解析
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用方法 .
- JSONObject与JSONArray的使用
- Android中的JSONObject和JSONArray解析json数据
- JSONObject与JSONArray的使用时候注意引用的jar包,否则会报错
- Json-lib使用——JSONObject与JSONArray
- [转]JSONObject与JSONArray的使用 .
- JSONObject JSONSerializer JSONArray java中的使用
- JSONObject与JSONArray的使用