通过反射实现Json数据部分更新JavaBean的属性

工作中遇到一个需求,根据对方返回Json来更新Java对象。查阅资料,写了个工具类,同时学到了反射获取集合泛型类型。代码里json类库为fastjson

 1 public class JsonUtil {
 2
 3     /**
 4      * JavaBean的属性比Json多时,根据Json更新JavaBean同名字段的值
 5      *
 6      * @param bean
 7      * @param json
 8      * @param <T>
 9      */
10     public static <T> void patchUpdate(T bean, JSONObject json) throws Exception {
11         Set<String> keys = json.keySet();
12         Field[] fields = bean.getClass().getDeclaredFields();
13         for (String key : keys) {
14             for (Field field : fields) {
15                 if (field.getName().equals(key)) {
16                     String value = json.getString(key);
17                     String type = field.getType().toString();
18                     field.setAccessible(true);
19                     if (type.endsWith("String")) {
20                         field.set(bean, value);
21                     } else if (type.endsWith("int")) {
22                         field.set(bean, Integer.parseInt(value));
23                     } else if (type.endsWith("double")) {
24                         field.set(bean, Double.parseDouble(value));
25                     } else if (type.endsWith("Date")) {
26                         DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
27                         Date date = fmtDateTime.parse(value);
28                         field.set(bean, date);
29                     } else if (type.endsWith("List")) {
30                         //先获取List的类型:java.util.List<E>
31                         ParameterizedType pt = (ParameterizedType)field.getGenericType();
32                         //获取泛型:E
33                         Class e = (Class)pt.getActualTypeArguments()[0];
34                         List list = JSONArray.parseArray(value, e);
35                         field.set(bean, list);
36                     }
37                 }
38             }
39         }
40     }
41 }
时间: 2024-10-28 23:54:49

通过反射实现Json数据部分更新JavaBean的属性的相关文章

Android混淆编译时,用到gson-2.2.2.jar进行反射解析json数据时,报ClassCastException错误

在我的代码中,我使用方法是: public synchronized <T> T parseJson(String json, Class<T> classOfT) throws Exception{ T target = null; Gson gson = new Gson(); target = gson.fromJson(json, classOfT); return target; } 之后在我的Activity中使用方式是: String addModel = JsonP

控制层解析post请求中json数据的时候,有些属性值为空

原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性,有setXXX方法是,从model到json会增加xxx的赋值(其中bean中xxx的首字母必须小写) 2.在内部类中使用时,不加static变量会不能转换成功 3.private或protected变量中,缺少get或者set方法会影响转换,而且这些方法中不能有其他的非自动生成的操作,否则这些无

Google中Gson的使用解析json数据-------学习篇

之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/6322456.html // json跟set集合之间的转换        String str = "[{'name':'zhangsan','age':20},{'name':'lisi','age':33}]";        Gson gson = new Gson();      

JSON1:JSON数据的操作

JSON是一个非常流行的,用于数据交换的数据格式,主要用于Web和移动应用程序中.JSON 使用键/值对(Key:Value pair)存储数据,并且表示嵌套键值对和数组两种复杂数据类型,仅仅使用逗号(引用Key)和中括号(引用数组元素),就能路由到指定的属性或成员,使用简单,功能强大.在SQL Server 2016版本中支持JSON格式,使用Unicode字符类型表示JSON数据,并能对JSON数据进行验证,查询和修改.推荐一款JSON验证和格式化的工具:json formatter. 一,

判断json数据是否为空

json数据是没有length这个属性的 ,所以不能直接用.length()方法 我们可以先遍历,然后根据遍历次数求长度 1.在IE上这样遍历json:(js代码) var jsonLength = 0; JSON形如:json = ["数据1","数据2"];$.each(json,function(index,record){alert(record); jsonLength++;}); 2.在火狐上这样遍历: for(var json in JSON){ al

jq处理JSON数据

jq 允许你直接在命令行下对 JSON 进行操作,包括分片.过滤.转换等等.让我们通过几个例子来说明 jq 的功能:一.输出格式化,漂亮的打印效果如果我们用文本编辑器打开 JSON,有时候可能看起来会一团糟,但是通过 jq 的 .(点)过滤器就可以立马让 JSON 的格式规整起来.1.用文本编辑器打开后的样子 2.用 jq 显示的结果 复制代码 代码如下: % jq . soundtag.json 二.快速查询JSON数据利用 jq 能够以 key 作为关键字来对 JSON 作出快速查询, 例如

C#的百度地图开发(二)转换JSON数据为相应的类

原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON数据,我们先将这个JSON数据,使用在线工盯进行格式化. [html] view plaincopy { "status": 0, "result": [ { "x": 39.926674689976, "y": 116.4659

通过jquery的ajax异步请求接收返回json数据

jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发送设置的datatype设置为jsonp格式数据或json格式都可以. 代码示例如下: $('#send').click(function () { $.ajax({ type : "GET", url : "a.php", dataType : "jsonp", success : function (data) { $.

Jquery JavaScript解析Ajax返回的json数据(转)

最近在用jquery的ajax方法传递接收json数据时发现一个问题,那就是返回的data数据,有时候可以直接作为json数据使用,可有时候又不行. 经过网友指出,这个问题已经有了比较明确的结论,那就是jquery ajax方法的complete方法是不会处理dataType的,所以如果你是在complete里面试图直接用json数据是不可行的,必须先通过eval. $.ajax方法如下: Java代码 $.ajax({ type: “POST”, url: ctxRoot+’FolderAct