一、应用场景
二、依赖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的简单介绍
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);四、实体类和集合的序列化与反序列化
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;
}
}
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());
}