Gson的使用
2015-11-12 21:52
204 查看
应用于json和实体类(或集合)的转换
1、注释过滤转换
2、简单的复合使用(map/list—-json)
3、模板反射对象转换(list<实体类>—–json)
4、嵌套复合使用(实体类—json)
////转换:
5、Date类型的gson转换:
(1)、date需要序列化和反序列化
(2)、转换
////转换方法:
////具体的序列方法
1、注释过滤转换
GsonBuilder builder = new GsonBuilder(); // 不转换没有 @Expose 注解的字段 builder.excludeFieldsWithoutExposeAnnotation(); Gson gson = builder.create(); // 将JavaBean字符串转换为 JSON------------------(1) String sUser = gson.toJson(user); System.out.println(sUser); // {"id":1001,"name":"张三"} // 将JSON字符串转换为 JavaBean ---------------(2) UserBean user2 = gson.fromJson(sUser, UserBean.class); System.out.println(user2.getId() + ", " + user2.getName()); // 1001, 张三
2、简单的复合使用(map/list—-json)
//-------------(1):List<String>--->string String listToJson = gson.toJson(testList); System.out.println(listToJson); // prints ["first","second"] // 将JSON字符串转换为 ArrayList -----(2) List<String> testList2 = (List<String>) gson.fromJson(listToJson, new TypeToken<List<String>>() { }.getType()); System.out.println(testList2); // 将HashMap字符串转换为 JSON-------(3) Map<String, String> testMap = new HashMap<String, String>(); testMap.put("id", "id.first"); testMap.put("name", "name.second"); String mapToJson = gson.toJson(testMap); System.out.println(mapToJson); // prints {"id":"id.first","name":"name.second"} // 将JSON字符串转换为 HashMap --------(4) Map<String, String> userMap2 = (Map<String, String>) gson.fromJson( mapToJson, new TypeToken<Map<String, String>>() { }.getType()); System.out.println(userMap2.get("id"));
3、模板反射对象转换(list<实体类>—–json)
Gson gson = new Gson(); Type type = new TypeToken<List<UserBean>>() { }.getType(); //----------------(1) String beanListToJson = gson.toJson(testBeanList, type); System.out.println(beanListToJson); // prints [{"id":"id","name":"name"}] //---------------(2) List<UserBean> testBeanListFromJson = gson.fromJson(beanListToJson,type); System.out.println(testBeanListFromJson); // prints [TestBean@1ea5671[id=id,name=name,birthday=<null>]]
4、嵌套复合使用(实体类—json)
public class GroupBean { private String id; private Map<String, UserBean> userMap; private List<UserBean> userList; }
////转换:
Gson gson = new Gson(); String sGroupBean = gson.toJson(groupBean, new TypeToken<GroupBean>() { }.getType()); System.out.println(sGroupBean); // {"user1":{"id":1001,"name":"张三"},"user2":{"id":1002,"name":"李四"}} // 将JSON字符串转换为 HashMap GroupBean groupBean2 = (GroupBean) gson.fromJson(sGroupBean, new TypeToken<GroupBean>() { }.getType()); System.out.println(groupBean2); // 张三
5、Date类型的gson转换:
(1)、date需要序列化和反序列化
(2)、转换
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<UserBean>>() { }.getType(); //-------------------(1) String beanListToJson = bean2json(testBeanList, type); System.out.println("beanListToJson:" + beanListToJson); // prints beanListToJson:[{"id":"2","name":"小二","birthday":1447336694266},{}] //-----------------(2) List<UserBean> testBeanListFromJson = json2bean(beanListToJson, type); System.out.println(testBeanListFromJson); // prints [TestBean@77a7f9[id=id,name=name,birthday=Mon Oct 26 12:39:05 // CST 2009]]
////转换方法:
/** * 序列化方法 * * @param bean * @param type * @return */ public static String bean2json(Object bean, Type type) { /* * 注释过滤的设置 */ Gson gson = new GsonBuilder() .registerTypeAdapter(java.util.Date.class, new UtilDateSerializer()) .setDateFormat(DateFormat.LONG).create(); return gson.toJson(bean); } /** * 反序列化方法 * * @param json * @param type * @return */ public static <T> T json2bean(String json, Type type) { Gson gson = new GsonBuilder() .registerTypeAdapter(java.util.Date.class, new UtilDateDeserializer()) .setDateFormat(DateFormat.LONG).create(); return gson.fromJson(json, type); }
////具体的序列方法
public class UtilDateDeserializer implements JsonDeserializer<java.util.Date> { @Override public java.util.Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { Long date=json.getAsJsonPrimitive().getAsLong(); System.out.println("对Date的转换:"+date); return new java.util.Date(date); } }
/** * 串行data * * @author ZZL * */ public class UtilDateSerializer implements JsonSerializer<java.util.Date> { @Override public JsonElement serialize(java.util.Date src, Type typeOfSrc, JsonSerializationContext context) { Number num=src.getTime(); return new JsonPrimitive(num); } }
相关文章推荐
- Spark pyspark package
- 公司内网与外网一起上
- OData V4 系列 Action 与 Function
- android传递数据bundle封装传递map对象
- ListView的多选模式
- HDU 1848 Fibonacci again and again(博弈_SG函数)
- 单例模式线程安全的实现方式
- 一条sql语句查出多个表的数据
- Windows平台下Ubuntu系统安装
- 各文件系统对单个文件大小的限制
- ptlib编译时,会自动扫描电脑系统,找出头文件以及库文件并进行引用,生成头文件ptbuildopts.h
- Swift——Command failed due to signal: Segmentation fault: 11
- powerdesigner16.5 列显示comment
- opencv笔记 3.访问图像元素的四种方法
- Objective-数组操作
- iOS之Drawing<2>
- sicily 1344. 数列
- OpenCV中保存视频的一般方法
- OpenCV中保存视频的一般方法
- ubuntu 解决 “E: Problem wih MergeList /var/lib/apt/lists/”错误