java 处理 简单对象的json格式互转

这个有点模仿于。google的json处理。
传进对象;传出json。
传进json;传出对象。
对于基本的简单对象例如:student
/**
* Student
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json;

import java.io.Serializable;

public class Student implements Serializable {

/**
*
*/
private static final long serialVersionUID = 8424716517986346222L;

private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}


对于这些基本类型的pojo。我们可以采用反射的形式来生成以及解析成json对象或则java对象。
下面是一个test的入口。
/**
* json test
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json;

import json.reflect.JsonReflect;
import net.sf.json.JSONObject;

public class JsonText {

/**
* @param args
*/
public static void main(String[] args) {
// 对象转化成json格式的
// Student student = new Student();
// student.setAge(10);
// student.setId(1);
// student.setName("bushyou");
// Map mapObject = (new JsonReflect<Student>(student)).Class2JsonObject();
// JSONObject jsonObject = new JSONObject();
// jsonObject.put("status", 200);
// jsonObject.put("data", mapObject);
// System.out.println(jsonObject.toString());


// json格式转化成对象的
String strObject = "{\"status\":200,\"data\":{\"id\":1,\"age\":10,\"name\":\"bushyou\"}}";
//生成json格式
JSONObject jsonObject1 = JSONObject.fromObject(strObject);
JSONObject jsonObject2 = (JSONObject) jsonObject1.get("data");
Student student = new Student();
student = new JsonReflect<Student>(student).JsonObject2Class(jsonObject2);
System.out.println(student.getName());
}

}



主要的处理以及解析的都在JsonReflect类中来处理。
/**
* 操作json格式的基础类
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import json.reflect.factory.IType;
import json.reflect.factory.JavaTypeFactory;
import net.sf.json.JSONObject;

public class JsonReflect<T> {
private static final String SERIAL_VERSION_UID = "serialVersionUID";
public Class classType;
private T t;

public JsonReflect(T t) {
this.t = t;
classType = t.getClass();
}

/**
* 将类转化成json对象
* @return
*/
public Map Class2JsonObject() {
Field[] fields = this.classType.getDeclaredFields();
String filedsName = "";
Object filedsValue = "";
Map map = new HashMap();
Field field = null;
for (int i = 0; i < fields.length; i++) {
field = fields[i];
field.setAccessible(true);
filedsName = field.getName();
if (SERIAL_VERSION_UID.equalsIgnoreCase(filedsName)) {
continue;
}
try {
filedsValue = field.get(t);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
map.put(filedsName,filedsValue);
field = null;
}
return map;
}

public T JsonObject2Class(JSONObject jsonObject){
T t = null;
Object obj = null;
try {
obj = classType.newInstance();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}//通过class类反射一个对象实体
Field[] fields = this.classType.getDeclaredFields();
String filedsName = "";
Field field = null;
for (int i = 0; i < fields.length; i++) {
field = fields[i];
field.setAccessible(true);
filedsName = field.getName();
if (SERIAL_VERSION_UID.equalsIgnoreCase(filedsName)) {
continue;
}

String type = field.getType().getSimpleName(); //原始类型
IType typeObject =JavaTypeFactory.createType(type);
Object object = typeObject.createData(jsonObject.get(filedsName)+""); //生成的值。。用于反射
Class classType = typeObject.getClassType(); //生成的类型。。用于反射


try {
String filedsSet ="set" + filedsName.substring(0,1).toUpperCase()+ filedsName.substring(1);
Method m = this.classType.getDeclaredMethod(filedsSet,new Class[]{classType});
m.invoke(obj,object);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
t = (T) obj;
return t;
}

}

下面是一个简单的工厂JavaTypeFactory,用于反射相关的值。
/**
* java 基本类型生成工厂方法
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json.reflect.factory;

public class JavaTypeFactory {

public static IType createType(String type){
if (type==null || "".equals(type)) {
new IllegalAccessException("type is not can be null");
}
if ("int".equalsIgnoreCase(type) || "Integer".equalsIgnoreCase(type)) {
return new IntergetType();
}
if ("String".equalsIgnoreCase(type)) {
return new StringType();
}
if ("date".equalsIgnoreCase(type)) {
return new DateType();
}

return new StringType();
}
}

/**
* Integer
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json.reflect.factory;

public class IntergetType implements IType {

@Override
public Object createData(String oldValue) {
// TODO Auto-generated method stub
return new Integer(oldValue);
}

@Override
public Class getClassType() {
// TODO Auto-generated method stub
return Integer.class;
}

}
/**
* Date
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json.reflect.factory;

import java.util.Date;

public class DateType implements IType {

@Override
public Object createData(String oldValue) {
// TODO Auto-generated method stub
return new Date(oldValue);
}

@Override
public Class getClassType() {
// TODO Auto-generated method stub
return Date.class;
}

}
/**
* Long
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json.reflect.factory;

public class LongType implements IType {

@Override
public Object createData(String oldValue) {
return new Long(oldValue);
}

@Override
public Class getClassType() {
// TODO Auto-generated method stub
return Long.class;
}

}
/**
* String
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json.reflect.factory;

public class StringType implements IType{

public String createData(String oldValue) {
return new String(oldValue) ;
}

@Override
public Class getClassType() {
// TODO Auto-generated method stub
return String.class;
}

}


下面是接口。
/**
* 接口
*
* @author shanzhu
* @version 1.0 2011-10-17
*/
package json.reflect.factory;

public interface IType {
//设置数据
public Object createData(String oldValue);
public Class getClassType();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值