使用json-lib完成json的序列化和反序列化

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 list=JSONArray.toList(arr,Emp.class);

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.日期类型转换

相关文档
最新文档