您的位置:首页 > 编程语言 > Java开发

利用java的反射来实现java的类对象转化为json对象

2014-04-02 00:00 465 查看
摘要: 利用java的反射来实现java的类对象转化为json对象

//在写程序的时候我们可以使用反射来使程序看起来更具有“灵性”,也就是可移植性比较强!反射就是能够让程序员在程序运行的时候可以获取对象类型信息。
举个简单的列子:
import java.lang.reflect.Field;
public class Ref {
public static void main(String[] args) {
Persion p = new Persion();
Class c = p.getClass();
Field[] f = c.getDeclaredFields(); //返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段, 这个是返回所有字段,包括私有属性
for (int i=0; i<f.length; i++) {
System.out.println(f[i]);
}
}
}
class Persion {
public int id;
private String name;
}
打印结果:
public int Persion.id
private java.lang.String Persion.name
从打印结果我们能够看出,这个Field中包含,类属性的访问修饰符,属性类型,以及属性名。同过这些我们可以很方便的来做我们接下来要做的事情。写一个通用的方法,来实现java对象到json对象的转化,虽然有道json jar包已经有了这些功能,但是这不妨挨“重复制造轮子‘,这是一个学习的过程。
首先我们的参数是Object,他可以接受任何类型

public static JSONObject changeJson(Object object) throws Exception {
JSONObject jb = new JSONObject(); //声明json对象
Class c = object.getClass(); //获取类的类型类
Field[] fields = c.getDeclaredFields(); //获取属性集合
Field.setAccessible(fields, true); //在类外面要想获取私有属性的值必须设置
Object[] name = new Object[fields.length]; //存储变量名
Object[] value = new Object[fields.length]; //存储变量值
Object[] type = new Object[fields.length]; //存储变量类型
for (int i = 0; i < fields.length; i++) { //设置数组的值
name[i] = fields[i].getName();
value[i] = fields[i].get(object);
type[i] = fields[i].getType();
}

for (int i = 0; i < name.length; i++) {
String s1 = type[i].toString(); //变量类型
String v1 = value[i] + ""; //变量值
String n1 = name[i].toString(); //变量名

if (s1.contains("String")) {
if (!v1.equals("null")) {
jb.put(n1, v1); //给jsonobject设置key-value
}
} else if (s1.contains("long")) {
jb.put(n1, Integer.parseInt(v1));
} else if (s1.contains("int")) {
jb.put(n1, Integer.parseInt(v1));
}
}
return jb;
}
这个只是简单的小例子,不过在做android开发的时候挺有用的。
源码下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: