文档章节

GSON 解析json 无需在手动解析实体类

tfc
 tfc
发布于 2014/03/17 15:45
字数 752
阅读 969
收藏 5

实体类的父类 该类下 Json2bean 是把json转成实体类 Json2ListBean 吧json转成 list<实体类>

GSON使用注意项 :json属性名和实体的属性名必须一致,不一致则赋值为空。

<!-- lang: java -->

/** 
  • File Name:Bean.java
  • Package Name:com.samon.lowo.bean
  • Date:2013-4-24上午9:21:50
  • Copyright (c) 2013, http://www.samontec.net/ All Rights Reserved.

*/

package com.samon.sais.bean;

import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;

import org.json.JSONException; import org.json.JSONObject;

import android.util.Log;

import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken;

/**

  • TODO 实体类父类

  • @date: 2013-4-24 上午9:21:50

  • @author TFC

  • @version 1.0.0 */ public class Bean implements Serializable {

    /** * */ private static final long serialVersionUID = 1L; int code = -1;

    public int getCode() { return code; }

    // 状态值

    /**

    • 将实体类传换成 HashMap

    • @author TFC

    • @createtime 2013-4-24 上午9:24:02

    • @param obj

    • @return HashMap

    • @throws IllegalArgumentException

    • @throws IllegalAccessException

    • @exception */ public static HashMap<String, Object> objToHash(Object obj) throws IllegalArgumentException, IllegalAccessException { HashMap<String, Object> hashMap = new HashMap<String, Object>(); Class clazz = obj.getClass(); List<Class> clazzs = new ArrayList<Class>();

      do { clazzs.add(clazz); clazz = clazz.getSuperclass(); } while (!clazz.equals(Object.class));

      for (Class iClazz : clazzs) { Field[] fields = iClazz.getDeclaredFields(); for (Field field : fields) { Object objVal = null; field.setAccessible(true); objVal = field.get(obj); if (objVal == null) { continue; } if (field.getName().equals("serialVersionUID")) { continue; } hashMap.put(field.getName(), objVal); } } return hashMap; }

    /**

    • 将map转换成Javabean
    • @param javabean
    •        javaBean
      
    • @param data
    •        map数据
      

    */ public static Object toJavaBean(Object javabean, Map<String, String> data) { Method[] methods = javabean.getClass().getDeclaredMethods(); for (Method method : methods) { try { if (method.getName().startsWith("set")) { String field = method.getName(); field = field.substring(field.indexOf("set") + 3); field = field.toLowerCase().charAt(0) + field.substring(1); method.invoke(javabean, new Object[] { data.get(field) }); } } catch (Exception e) { } } return javabean; }

    public static String Bean2Json(Object obj) { return new Gson().toJson(obj); }

    public static <T> T Json2bean(String json, Class<T> c) { return new Gson().fromJson(json, c); }

    public static <T> T Json2bean(JSONObject json, Class<T> c) { return new Gson().fromJson(json.toString(), c); }

    public static <T> T Json2bean(JSONObject json) { return new Gson().fromJson(json.toString(), new TypeToken<T>() { }.getType()); }

    public static <T> T Json2bean(String json) { return new Gson().fromJson(json.toString(), new TypeToken<T>() { }.getType()); }

    public static <T> List<T> Json2ListBean (String json,Class<T> c){ List<T> lis=new ArrayList<T>(); JsonParser parser = new JsonParser();
    JsonElement jsonEl = parser.parse(json); JsonArray jsonObj = null;
    jsonObj = jsonEl.getAsJsonArray();//转换成Json对象
    for (int i = 0; i < jsonObj.size(); i++) { lis.add(Json2bean(jsonObj.get(i).toString(),c)); }

     return lis;
    

    } public static <T> List<T> Json2ListBean (JsonElement json,Class<T> c){ List<T> lis=new ArrayList<T>(); JsonArray jsonObj = null;
    jsonObj = json.getAsJsonArray();//转换成Json对象
    for (int i = 0; i < jsonObj.size(); i++) { lis.add(Json2bean(jsonObj.get(i).toString(),c)); } return lis; }

    public static Map<String, Object> JsontoMap(String jsonStr) { Map<String, Object> result = new HashMap<String, Object>(); JSONObject jsonObject; try { jsonObject = new JSONObject(jsonStr);

     	Iterator<String> iterator = jsonObject.keys();
     	String key = null;
     	String value = null;
     	while (iterator.hasNext()) {
     		try {
     			key = iterator.next();
     			value = jsonObject.getString(key);
     			result.put(key, value);
     		} catch (Exception e) {
     			// TODO: handle exception
     			Log.e("JsontoMap", e.toString());
     		}
     	}
     } catch (JSONException e1) {
     	// TODO Auto-generated catch block
     	e1.printStackTrace();
     }
     return result;
    

    }

    /**

    • 两个类的属性对比 一样的则跳过

    • @author TFC

    • @createtime 2013-5-4 下午2:23:26

    • @param obj

    • @param oldobj

    • @return

    • @throws IllegalArgumentException

    • @throws IllegalAccessException

    • @exception */ public static HashMap<String, Object> objToHash(Object obj, Object oldobj) throws IllegalArgumentException, IllegalAccessException { HashMap<String, Object> hashMap = new HashMap<String, Object>(); Class clazz = obj.getClass(); Class oldClazz = obj.getClass(); List<Class> clazzs = new ArrayList<Class>(); List<Class> oldClazzs = new ArrayList<Class>(); do { clazzs.add(clazz); clazz = clazz.getSuperclass(); } while (!clazz.equals(Object.class));

      do { oldClazzs.add(oldClazz); oldClazz = oldClazz.getSuperclass(); } while (!oldClazz.equals(Object.class)); for (int i = 0; i < clazzs.size(); i++) { Field[] fields = clazzs.get(i).getDeclaredFields(); Field[] oldfields = oldClazzs.get(i).getDeclaredFields(); for (int j = 0; j < fields.length; j++) { Field field = fields[j]; Field oldField = oldfields[j]; if (field.getName().equals(oldField.getName())) { Object objVal = null; field.setAccessible(true); oldField.setAccessible(true); objVal = field.get(obj); if (objVal == null || objVal.equals(oldField.get(oldobj))) { continue; } hashMap.put(field.getName(), objVal); }

       }
      

      } return hashMap; }

}

使用例子: class Person extends Bean {
private String name;
private int age;
}
json= {"name":"tfc","age":"25"} Person p=Person.Json2bean(json,Person.Class);

© 著作权归作者所有

tfc

tfc

粉丝 3
博文 12
码字总数 4629
作品 0
长春
程序员
私信 提问
加载中

评论(0)

使用GSON来解析和生成JSON基础,通过传入List集合自动生成json字符串(一)

由于当时本人水平很渣,实际没怎么麻烦。不要用这种写法。 使用GSON来解析JSON数据需要下载google-gson。 用gson解析以上字符串输出,将并其转化成实体类对象,然后放入List容器中并遍历然后...

奔跑的码农
2016/08/04
953
0
Flutter开发之JSON解析

对于JSON格式的数据交互,想必大家不会陌生。JSON(全称JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,JSON因为具有易于人阅读和编写,同时也易于机器解析和生成,并...

xiangzhihong
2019/08/21
0
0
解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题

解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题 方法一: Gson gson = new Gson(); // 将json格式字符串转化为List<对象> Type listType = new TypeToken<ArrayLi...

归来熙
2013/11/14
1.6K
0
Android JSON解析插件

JSON是一种轻量级的数据格式,用于数据的交互。 Android交互数据主要两种方式:JSON和 XML。XML格式比JSON格式数量略大,所以大多都使用Json数据格式。 在Android开发的过程中,数据访问 JS...

汪菜菜
2019/10/09
0
0
AsyncHttpClient 实战总结及思考

第一次参加工作时使用的网络框架是AsyncHttpClient,虽说该框架使用非常简洁,但是使用的过程同时也是初学者成长与思考的过程。在项目的不同阶段,重新查阅网络请求的代码,总能想到一些优化...

一剑围城
2017/04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

何时使用vs ref vs out

前几天有人问我应该使用参数关键字out而不是ref 。 虽然我(我认为)理解了ref和out关键字之间的差异( 之前已经提到过 ),最好的解释似乎是ref == in and out ,什么是一些(假设的或代码的...

javail
22分钟前
37
0
宜信如何做到既满足远程办公的短时便利性需求,又不丧失安全性

对于IT互联网企业来说远程办公并不陌生,但是疫情的突然爆发,直接大规模的使用远程办公应用,势必会带来一系列的安全问题,尤其是大量隐私数据安全问题,因为此次的疫情,大量的企业内部人员...

宜信技术学院
27分钟前
29
0
如何获得元素的渲染高度?

如何获得元素的渲染高度? 假设您有一个<div>元素,其中包含一些内容。 内部的内容将扩展<div>的高度。 当您没有明确设置高度时,如何获得“渲染的”高度。 显然,我尝试过: var h = docume...

技术盛宴
38分钟前
40
0
zookeeper宕机与dubbo直连

加入zookeeper宕机后,一段时间内consumer依然能够获取provider的服务,实际上使用了本地缓存进行通讯,这也是dubbo健壮性的一种体验。 dubbo健壮性的表现: 1.监控中心宕机,不影响使用,只...

七宝1
39分钟前
44
0
一分钟了解【X-Frame-Options设置】

含义 通过设置X-Frame-Options来控制网页能否被frame或iframe嵌入。 目的 防止出现 点击劫持 :攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在...

crazymus
45分钟前
48
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部