使用json-lib完成json的序列化和反序列化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用json-lib完成json的序列化和反序列化2011-07-29 14:07:43
分类:默认分类 | 标签:软件 java json.
json的序列化和反序列化在现在的javaweb中特别是ajax中使用的比较频繁,现在本人就这种技术提出自己的使用心得。
我的pojo对象的结构是这样的
部门表和员工表 1对多的关系
部门对象
public class Dept implements java.io.Serializable {
private Integer depid;//部门ID
private String depname;//部门名称
private Set emps = new HashSet(0);//员工集合
}
员工对象
public class Emp implements java.io.Serializable {
private Integer empid;//员工id
private Dept dept;//部门
private String empname;//员工名称
private Date birthday;//生日
}
1.json字符串序列化成对象
/**
*通过json转换成对象
*@author凤生禾予
*/
public void jsonToObject(){
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
StringBuffer str=new StringBuffer();
// json字符串
str.append("{empid:1,dept:{depid:1,depname:'开发部'},empname:'张三
',birthday:'"+sdf.format(d)+"'}");
// 使用JSONObject将json序列化对象
JSONObject obj=JSONObject.fromObject(str.toString());
// 将JOSNObject对象转换成pojo对象
Emp emp=(Emp) JSONObject.toBean(obj,Emp.class);
System.out.println(emp.getBirthday());
}
这里需要注意的是json字符串的写法以{}表示一个对象,字符串必须加引号
2json字符串序列化成集合
/**
*通过json转换成集合
*@author凤生禾予
*/
public void jsonToArray(){
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
StringBuffer str=new StringBuffer();
//json字符串
str.append("[");
str.append("{empid:1,dept:{depid:1,depname:'开发部'},empname:'张三
',birthday:'"+sdf.format(d)+"'}");
str.append(",");
str.append("{empid:2,dept:{depid:1,depname:'开发部'},empname:'李四
',birthday:'"+sdf.format(d)+"'}");
str.append("]");
//将json转换成JSONArray对象
JSONArray arr=JSONArray.fromObject(str.toString());
//使用JSONArray转换成集合
List
for (Emp emp : list) {
System.out.println(emp.getEmpname());
System.out.println(emp.getBirthday());
System.out.println(emp.getDept().getDepname());
}
}
这里需要注意的是json的数组用法为[]
3.对象反序列化成json
/**
*通过对象转换成json
*@author凤生禾予
*/
public void objectToJson(){
ClassPathXmlApplicationContext xa=new
ClassPathXmlApplicationContext("applicationContext.xml");
EmpDAO dao=(EmpDAO) xa.getBean("EmpDAO");
//查找对象
Emp emp=dao.findById(27);
String s=JSONObject.fromObject(emp).toString();
System.out.println(s);
}
这里会有2个问题
1.pojo中对象存在有死循环问题,部门类中有员工对象的集合,员工类中有部门的对象,json-lib 反序列化中会进行双向转换,从而形成死循环,会报一个json-lib的经典异常:
Exception in thread "main" net.sf.json.JSONException: There is a cycle in the hierarchy!
2.日期类型转换