当要将JSON数据串反序列化自身为非泛型的POJO时,使用Gson.fromJson(String, Class)方法。自身为非泛型的POJO的包括两种:
1. POJO对象不包含任何泛型的字段
2. POJO对象包含泛型字段,例如泛型集合或者泛型类
Data类
a.不是泛型类,
b.Data中的集合List和Map都是泛型的
c.Data中不包含其它的POJO
POJO
package gson.test2; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Data { private int id; private List<Integer> numbers; private Map<String, Integer> map; public int getId() { return id; } public void setId(int id) { this.id = id; } public List<Integer> getNumbers() { return numbers; } public void setNumbers(List<Integer> numbers) { this.numbers = numbers; } public Map<String, Integer> getMap() { return map; } public void setMap(Map<String, Integer> map) { this.map = map; } public static Data create() { Data d = new Data(); d.setId(123456); List<Integer> numbers = new ArrayList<Integer>(); numbers.add(100); numbers.add(200); numbers.add(300); d.setNumbers(numbers); Map<String, Integer> maps = new HashMap<String, Integer>(); maps.put("x", 9); maps.put("y", 99); maps.put("z", 999); d.setMap(maps); return d; } }
测试类:
package gson.test2; import com.alibaba.fastjson.JSON; import com.google.gson.Gson; import java.util.*; public class Test { public static void main(String[] args) { Data d = Data.create(); String gson = new Gson().toJson(d); String fastjson = JSON.toJSONString(d); System.out.println(fastjson); System.out.println(gson); d = new Gson().fromJson(gson, Data.class); Map<String, Integer> map = d.getMap(); Set<Map.Entry<String, Integer>> entries = map.entrySet(); Iterator<Map.Entry<String, Integer>> iterator = entries.iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(entry.getKey() + "\t" + entry.getValue()); } } }
Data类
a.不是泛型类,
b.Data中的集合List和Map都是泛型的
c.Data中包含其它的非泛型的POJO
C聚合B,B聚合A,B中有个Date类型的实例变量
import java.util.List; public class A { private String key; private String value; private List<String> primitives; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public List<String> getPrimitives() { return primitives; } public void setPrimitives(List<String> primitives) { this.primitives = primitives; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; A a = (A) o; if (this.key == null && a.key != null || this.key != null && a.key == null) { return false; } if (this.value == null && a.value != null || this.value != null && a.value == null) { return false; } if (this.primitives == null && a.primitives != null || this.primitives != null && a.primitives == null) { return false; } if (!this.key.equals(a.key)) { return false; } if (!this.value.equals(a.value)) { return false; } if (this.primitives.size() != a.primitives.size()) { return false; } for (int i = 0; i < this.primitives.size(); i++) { String x = this.primitives.get(i); String y = a.primitives.get(i); if (!x.equals(y)) { return false; } } return true; } @Override public int hashCode() { int result = key != null ? key.hashCode() : 0; result = 31 * result + (value != null ? value.hashCode() : 0); result = 31 * result + (primitives != null ? primitives.hashCode() : 0); return result; } }
import java.util.Date; import java.util.List; public class B { private Date currentTime; private List<A> rows; public Date getCurrentTime() { return currentTime; } public void setCurrentTime(Date currentTime) { this.currentTime = currentTime; } public List<A> getRows() { return rows; } public void setRows(List<A> rows) { this.rows = rows; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; B b = (B) o; if (this.currentTime == null && b.currentTime != null || this.currentTime != null && b.currentTime == null) { return false; } if (this.rows == null && b.rows != null || this.rows != null && b.rows == null) { return false; } // if (!this.currentTime.equals(b.currentTime)) { // return false; // } if (this.rows.size() != b.rows.size()) { return false; } for (int i = 0; i < this.rows.size(); i++) { A a1 = this.rows.get(i); A a2 = b.rows.get(i); if (!a1.equals(a2)) { return false; } } return true; } @Override public int hashCode() { int result = currentTime != null ? currentTime.hashCode() : 0; result = 31 * result + (rows != null ? rows.hashCode() : 0); return result; } }
import java.util.List; public class C { private A aObject; private List<B> rows; public A getAObject() { return aObject; } public void setAObject(A aObject) { this.aObject = aObject; } public List<B> getRows() { return rows; } public void setRows(List<B> rows) { this.rows = rows; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; C c = (C) o; if (this.aObject == null && c.aObject != null || this.aObject != null && c.aObject == null) { return false; } if (this.aObject != null && !this.aObject.equals(c.aObject)) { return false; } if (this.rows == null && c.rows != null || this.rows != null && c.rows == null) { return false; } if (this.rows.size() != c.rows.size()) { return false; } for (int i = 0; i < this.rows.size(); i++) { B b1 = this.rows.get(i); B b2 = c.rows.get(i); if (!b1.equals(b2)) { return false; } } return true; } @Override public int hashCode() { int result = aObject != null ? aObject.hashCode() : 0; result = 31 * result + (rows != null ? rows.hashCode() : 0); return result; } }
相关推荐
Gson解析json,实现泛型解析数据,根据用户传入的类型,解析称用户需要的,Common \CommonList 里面的status message data相关的约定可以更具开发者与服务器的约定修改
gson 解析泛型和将泛型转为json字符串
fastjson、gson、jackson序列化和反序列化所用json文件
fastJosn Gson Jackson 序列化和反序列化所需要的jar,已经全部验证过,请放心使用咯
Gson 中解决 json 反序列化时相同属性对应不同类型的值的问题(代码),对应文章链接:https://blog.csdn.net/ZiFung_Yip/article/details/89143255
Gson解析之自定义序列化和反序列化的代码例子,但后端对同一个字段给的数据类型与文档不一致时的处理
实现了通过gson对enum的自定义转化过程,不需要预先定义enmu,并且不需要修改gson源码,在框架顶层处理基本可以达到对enum的抽象管理。
格森Gson是一个Java库,可用于将Java对象转换为其JSON表示形式。 它还可以用于将JSON字符串转换为等效的Java对象。 Gson可以处理任意Java对象,包括您没有源代码的现有对象。 有一些开源项目可以将Java对象转换为...
GSON是Google开发并开源的一个Java的JSON转换库,这里我们将来讲解GSON实现Java对象的JSON序列化与反序列化的实例教程,需要的朋友可以参考下
Json解析工具类完善一下,使用GSON+JsonPath+泛型来提高自己写JSON解析的效率 http://blog.csdn.net/b275518834/article/details/49819831
集成多枚举类型统一序列化/反序列化处理,再也不用创建多个Adapter了 http://blog.csdn.net/atm008/article/details/51733849
1.2 JavaBean序列化/反序列化 1.2.1 步骤说明 普通JavaBean 嵌套JavaBean 1.3 数组和List的序列化/反序列化 1.3.1 数组的序列化/反序列化 1.3.2 List集合的序列化/反序列化 1.4 Set和Map的序列化/反序列化 1.4.1 Set...
gson-2.0.1.jar-Json解析工具,序列化反序列化,实体类互转Json,免费jar包
json字符串实体bean或者List互转(gson和jackson,支持泛型),支持json的格式化,所需要的包在代码也有说明。还有少的可以告知我,谢谢
主要讲述Json序列化与反序列化,主要使用Gson、FastJson、Jackson实现
基于泛型的,高性能的,可指定构造函数及传入参数初始化的,线程安全的,扩展性非常高的传说中的对象池 详细看: http://blog.csdn.net/luyikk/archive/2010/05/10/5576550.aspx
Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。 Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) from...
可以将一个JSON字符串转成一个Java对象(反序列化),或者反过来(序列化)。 GSON地址:google/gson (github.com) Android引入GSON: implementation ‘com.google.code.gson:gson:2.9.0’ Gson 是 Google 提供的...
Gson jackson fastjson LoganSquare 使用demo Gson jackson fastjson LoganSquare 使用demo
利用Google Gson实现JSON字符串和对象之间相互转换,内含源码和jar包