一、将Data类型的bean对象转为JSON对象
1、添加自定义的日期格式转化类
package com.test.json;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
public class JsonDateValueProcessor implements JsonValueProcessor{
private String format ="yyyy-MM-dd HH:MM:ss";
@Override
public Object processArrayValue(Object arg0, JsonConfig arg1) {
// TODO Auto-generated method stub
return process(arg0);
}
@Override
public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
// TODO Auto-generated method stub
return process(arg1);
}
private Object process(Object value){
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.UK);
return sdf.format(value);
}
return value == null ? "" : value.toString();
}
}
具体转化的时候的代码:
User user = new User();
user.setId(1000);
user.setName("万诗强");
user.setBirthday(new Date());
// JsonConfig是net.sf.json.JsonConfig中的这个,为固定写法
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());
JSONObject jo = JSONObject.fromObject(user, jsonConfig);
System.out.println(jo.toString());
运行结果:{"birthday":"2013-10-24 11:10:50","id":1000,"name":"万诗强"}
二、将JSON字符串转化为带有Data类型的bean对象
1、可以写一个工具类MyJSONUtil,
package com.test.json;
import java.util.Date;
import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.JSONUtils;
public class MyJSONUtil {
@SuppressWarnings("unchecked")
public static <T> T jsonToBean(Class<T> clazz, String JsonString) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());
JSONUtils.getMorpherRegistry().registerMorpher(
new DateMorpher(new String[] { "yyyy-MM-dd HH:MM:ss" }));
JSONObject jsonObject = JSONObject.fromObject(JsonString);
T entity = (T) JSONObject.toBean(jsonObject, clazz);
return entity;
}
}
具体的调用如下:
User user1 = MyJSONUtil.jsonToBean(User.class, jo.toString());
System.out.println("id="+ user1.getId()
+ "\tname="
+ user1.getName()
+ "\tbirthday="
+ new SimpleDateFormat("yyyy-MM-dd HH:MM:ss").format(user1.getBirthday()));
运行结果:id=1000
name=万诗强
birthday=2013-10-24 11:10:50
User对象中加入List<Subject> subjectList属性(课程列表)后的JSON生成与解析示例:
public class TestJSON {
public static void main(String[] args) {
// 初始化数据
User user = new User();
user.setId(1000);
user.setName("万诗强");
user.setBirthday(new Date());
// 创建课程列表
List<Subject> subjectList = new ArrayList<Subject>();
Subject subject1 = new Subject();
subject1.setId(11);
subject1.setName("java课程");
subject1.setCreateTime(new Date());
Subject subject2 = new Subject();
subject2.setId(12);
subject2.setName("android课程");
subject2.setCreateTime(new Date());
subjectList.add(subject1);
subjectList.add(subject2);
user.setSubjectList(subjectList);
// JsonConfig是net.sf.json.JsonConfig中的这个,为固定写法
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,
new JsonDateValueProcessor());
JSONObject userJo = JSONObject.fromObject(user, jsonConfig);
System.out.println(userJo.toString());
// 从JSON字符串中解析User对象
User user1 = MyJSONUtil.jsonToBean(User.class, userJo.toString());
// 从JSON字符串中解析Subject对象
List<Subject> subjectListFromJSONString = new ArrayList<Subject>();
JSONArray subjectListJa = JSONArray.fromObject(userJo
.getString("subjectList"));
for (int i = 0; i < subjectListJa.size(); i++) {
Subject subject = MyJSONUtil.jsonToBean(Subject.class,
subjectListJa.getJSONObject(i).toString());
subjectListFromJSONString.add(subject);
}
// 把解析出来的subjectList赋值给User1中的属性
user1.setSubjectList(subjectListFromJSONString);
// 打印结果
System.out.println("id="
+ user1.getId()
+ "\tname="
+ user1.getName()
+ "\tbirthday="
+ new SimpleDateFormat("yyyy-MM-dd HH:MM:ss").format(user1
.getBirthday()) + "\tsubjectList="
+ user1.getSubjectList());
for (Subject subject : user1.getSubjectList()) {
System.out.println("subjectList:id="
+ subject.getId()
+ "\tname="
+ subject.getName()
+ "\tcreateTime="
+ new SimpleDateFormat("yyyy-MM-DD HH:MM:ss")
.format(subject.getCreateTime()));
}
}
}
User对象中加入List<Subject> subjectList属性(课程列表)后的JSON生成与解析示例: