您的位置:首页 > 移动开发 > Objective-C

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());
}


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JSONObject json 序列化