Gson TypeAdapter用法
实例:写一个TypeAdapter,注册TypeAdapter来处理Enum类型.
实体类:
public enum Color { RED("红色",1),GREEN("绿色",2),BLANK("白色",3), YELLO("黄色", 4); private String name; private int index; private Color(String name, int index) { this.name = name; this.index = index; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
import java.util.Date; public class Flower { private String name; private String PlaceofOrigin; private Color color; private Date date; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPlaceofOrigin() { return PlaceofOrigin; } public void setPlaceofOrigin(String placeofOrigin) { PlaceofOrigin = placeofOrigin; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String toString() { return "Flower [name=" + name + ", PlaceofOrigin=" + PlaceofOrigin + ", color=" + color + ", date=" + date + "]"; } }
import java.lang.reflect.Type; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; public class EnumSerializer implements JsonSerializer<Color>,JsonDeserializer<Color> { JsonPrimitive colorPrimitive; public JsonElement serialize(Color color, Type typeOfSrc, JsonSerializationContext context) { colorPrimitive = new JsonPrimitive(color.getName()); return colorPrimitive; } public Color deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if(json.getAsJsonPrimitive().equals(colorPrimitive)){ String name = json.getAsJsonPrimitive().getAsString(); for(int i=0;i<Color.values().length;i++){ if(Color.values()[i].getName().equals(name)) return Color.values()[i]; } } return null; } }
测试类:
import java.util.Date; import org.junit.Test; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class TestEnumGson { //无注册自定义TyepAdapter @Test public void testEnum(){ System.out.println("-----------------无注册自定义TyepAdapter---------------------"); Flower flower = new Flower(); flower.setName("Rose"); flower.setPlaceofOrigin("China"); flower.setColor(Color.RED); flower.setDate(new Date()); Gson gson = new Gson(); String flowerStr = gson.toJson(flower); System.out.println(flowerStr); Flower flower1 = gson.fromJson(flowerStr, Flower.class); System.out.println(flower1); } //注册自定义TyepAdapter @Test public void testEnumSerializer(){ System.out.println("-----------------注册自定义TyepAdapter---------------------"); Flower flower = new Flower(); flower.setName("Rose"); flower.setPlaceofOrigin("China"); flower.setColor(Color.RED); flower.setDate(new Date()); GsonBuilder gsonBuiler = new GsonBuilder(); gsonBuiler.registerTypeAdapter(Color.class, new EnumSerializer()); Gson gson = gsonBuiler .setDateFormat("yyyy-MM-dd HH:mm:ss").create(); String flowerStr = gson.toJson(flower); System.out.println(flowerStr); Flower flower1 = gson.fromJson(flowerStr, Flower.class); System.out.println(flower1); } }
结果:
-----------------注册自定义TyepAdapter--------------------- {"name":"Rose","PlaceofOrigin":"China","color":"红色","date":"2016-02-17 10:35:46"} Flower [name=Rose, PlaceofOrigin=China, color=RED, date=Wed Feb 17 10:35:46 CST 2016] -----------------无注册自定义TyepAdapter--------------------- {"name":"Rose","PlaceofOrigin":"China","color":"RED","date":"Feb 17, 2016 10:35:46 AM"} Flower [name=Rose, PlaceofOrigin=China, color=RED, date=Wed Feb 17 10:35:46 CST 2016]
PS: 区别看color的值 "红色" 和 "RED", date不一样是因为设置了 gsonBuiler.setDateFormat("yyyy-MM-dd HH:mm:ss")
参考资料:
Gson官方文档:https://github.com/google/gson/blob/master/UserGuide.md
Gson指南(Gson官方文档中文版):http://www.letiantian.me/2014-05-22-java-gson-json/
Gson进阶(高级用法):
http://itroadmap.sinaapp.com/2015/11/04/gson%E8%BF%9B%E9%98%B6%EF%BC%88%E9%AB%98%E7%BA%A7%E7%94%A8%E6%B3%95%EF%BC%89/
Json转换利器Gson之实例六:http://blog.csdn.net/lk_blog/article/details/7685347
相关推荐
人工智能-机器学习-数据预处理
kson:用于Kotlin数据类的Gson TypeAdapter和Factory生成器
非常详细的json使用方法。包括对象和json之间的相互转换,集合和json之间的相互转换,自己按照节点解析。gson功能真的很强大。
Gson的基本使用,特点:a、快速、高效b、代码量少、简洁c、面向对象d、数据传递和解析方便
maven项目中gson使用方法.pdfmaven项目中gson使用方法.pdf
包含以下java源文件: ...com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class ...
fastJson和gson的用法,解析最常用的是 json ,fastjson第三方库http://fastjson.codeplex.com/ http://www.json.org/
Java JSON处理库之Gson的用法详解.rar
介绍:Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. 压缩包里有以下文件: ...
赠送jar包:gson-2.8.6.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
浅析在Android系统中JSON和GSON的用法.pdf
om.google.code.gson/gson/2.6.2 Gson maven依赖 java 开发包
Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象 下面是几个小例子 1. toJson() example Java 代码 收藏代码 1. class TestObjectToJson { 2. private int...
赠送jar包:gson-2.8.0.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:gson-2.8.7.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
gson2.7 下载即可使用 GSON是Google开发的Java API,用于转换Java对象和Json对象
赠送jar包:gson-2.8.9.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
GSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串...
Google Gson的使用方法,实现Json结构的相互转换源代码 在Java开发中,有时需要保一个数据结构成字符串,可能你会考虑用Json,但是当Json字符串转换成Java对象时,转换成的是JsonObject,并不是你想要的Class类型的...
用户列表对象,使用JSONObject jsonStu = JSONObject.fromObject(list); 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码...