文档章节

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

zongjh
 zongjh
发布于 2014/04/02 09:38
字数 560
阅读 1575
收藏 7

 //在写程序的时候我们可以使用反射来使程序看起来更具有“灵性”,也就是可移植性比较强!反射就是能够让程序员在程序运行的时候可以获取对象类型信息。
举个简单的列子:
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开发的时候挺有用的。
源码下载地址


© 著作权归作者所有

zongjh
粉丝 1
博文 39
码字总数 12405
作品 0
东城
程序员
私信 提问
Gson通过反射将Json转化为java对象

Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。 然后我们先写一个demo来用Gson将一个json转化...

woshixin
04/20
0
0
qmikjson最高效的java json 协议转换 架构之一

简介 qmikjson是基于java写的一套json协议转换框架,支持 文本跟javabean,map,list的相互转换,是目前市场上java语言最高效的转换框架之一. api极其简单 适用场景 适合小数据对象的数据转换,在...

leochen36
2013/10/13
0
9
Java核心机制:反射机制的原理及应用方法

一、java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): 1、Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在...

Java架构资源分享
2018/11/25
0
0
阿里P8技术心得:java反射机制的核心原理

一、java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): 1、Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在...

Java架构
2018/11/25
0
0
老司机带你深入浅出Java反射

反射,它就像是一种魔法,引入运行时自省能力,赋予了 Java 语言令人意外的活力,通过运行时操作元数据或对象,Java 可以灵活地操作运行时才能确定的信息 这里笔者就深入浅出总结下Java反射,...

小刀爱编程
2018/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?

轻松筹首创了“大病救助”模式,帮助了众多病患在第一时间解決了医疗资金等问题,为了从源头解决了医疗资金问题。而在轻松筹这样全球5.5亿用户信赖的大病筹款平台的背后,是日益增长的各种数...

阿里云云栖社区
24分钟前
4
0
Confluence 6 在升级过程中查看合并日志

为了监控升级的过程,你应该查看 application log 日志中的输出。 通常日志经常将会显示多个日志实例,这个实例是定义在日志的 INFO 级别的,通常格式如下: WikiToXhtmlMigrationThread-n -...

honeymoose
25分钟前
2
0
git diff 文件对比

git diff filepath 工作区与暂存区比较 git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较 git diff --staged 或 --cached filepath 暂存区与HEAD比较 git diff branchName filepa......

李佳顺
25分钟前
1
0
spring mvc 定制化配置

spring mvc 自定义配置 1.实现某些接口,然后让上面的类加载进去. class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean......

最爱肉肉
27分钟前
2
0
OSG_采样像机的内容如果不显示到窗口上

cameraLight->setRenderTargetImplementation(Camera::FRAME_BUFFER_OBJECT);// 这句使内容不渲染到屏幕上cameraLight->setRenderOrder(Camera::PRE_RENDER); 1.setRenderTargetImplement......

洛克人杰洛
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部