Gson转换—将Gson数据转换为对象实体
最近,由于在调用远程接口时需要解密数据,因此返回的参数统一为以下json格式
{
' code':0,
' msg': '成功',
' sign':'abcdefghijkl ',
' timestamp':1491897441000,
'数据' : { }
}
首先,传输中的目标实体
user.java
公共类用户{
私有Int id;
私有字符串名称;
.省略获取集.
@Override
公共字符串字符串
返回用户[ id=' id ',name=' name '];
}
}
如果将返回的数据转换为对象,则可能存在以下三种情况:
1 .用户对象
2 .列表列表对象
3 .页面页面
Page.java
公共类页{
保密页面;
私密int size;
隐私全部;
私有列表数据;
.省略获取集.
@Override
公共字符串字符串
返回用户[ page=' page ',size=' size ',total=' total ',data=' data '];
}
}
因此,返回data的json有以下三种:
1 .目标实体的json json - User
{
' id':1,
' name':'eric '
}
2 .目标实体列表的json json - List list
[
{
' id':1,
' name':'eric '
(,
{
' id':2,
' name':'john '
}
]
3 .分页实体JSon JSon-page页
{
' page':1,
' size':10,
'总' :2,
' data':[
{
' id':1,
' name':'eric '
(,
{
' id':2,
' name':'john '
}
]
}
因此,需要编写公共类来解决上述转换问题
GsonUtils.java
公共类gsonutils {
私有gsonutils (
}
publicstatictfromjson (字符串JSON,Class type ) {
Gson gson=new Gson (;
returnGSON.FromJSON(JSON,type );
}
publicstaticlistlistfromjson (字符串JSON )。
Gson gson=new Gson (;
returnGSON.fromJSON(JSON,new TypeToken () {}.getType ) );
}
}
测试:
公共类主{
publicstaticvoidmain (字符串[ ] args ) {
String json1='{'id':1,'name':'eric'};
String json2='[{'id':1,'name':'eric'},{'id':2, ' name' 33333323365232365292;
String json3='{'page':1,'size':10,'total':2, ' data' 333365284; 65284; id }
useruser=gsonutils.from JSON (JSON 1,User.class );
list lists=gsonutils.listfromjson (JSON2);
page page=gsonutils.from JSON (JSON 3,Page.class );
system.out.println(user: ) user;
system.out.println(lists: ) lists;
system.out.println(page: ) page;
}
}
运行后的结果:
user :用户[ id=1,name=eric]
lists:[{id=1.0,name=eric},{id=2.0,name=john}]
page:User [page=1,size=10,total=2,list=[{id=1.0,name=eric},{id=2.0,name=john}]]
此时,三种格式的json已转换为Object,但这里存在问题。 使用以下方法获取user时,将处理Java反射类型TypeToken通用运行时类型的清除,从而导致错误
useruser=lists.get(0;
exceptioninthread ' main ' Java.lang.classcastexception 3360 com.Google.gson.internal.linkedtreeemapcanotbecastoswwwwwwwwwwwwwwwwwwwwwwwer.LD
ATS wun.test.main.main (main.Java :27 )。
所以我们把方法listFromJson
publicstaticlistlistfromjson (字符串JSON,类型类型)。
Gson gson=new Gson (;
returnGSON.FromJSON(JSON,type );
}
调用时,传递具体的类型
公共类主{
publicstaticvoidmain (字符串[ ] args ) {
String json1='{'id':1,'name':'eric'};
String json2='[{'id':1,'name':'eric'},{'id':2, ' name' 33333332365232365292;
String json3='{'page':1,'size':10,'total':2, ' data' 333365284; 65284; id }
useruser=gsonutils.from JSON (JSON 1,User.class );
list lists=gsonutils.listfromjson (JSON 2,new TypeToken () {}.getType ) );
page page=gsonutils.from JSON (JSON 3,Page.class );
system.out.println(user: ) user;
system.out.println(lists: ) lists;
system.out.println(page: ) page;
useruser1=lists.get(0;
system.out.println(user1: ) user1);
}
}
执行结果如下。
user :用户[ id=1,name=eric]
lists:[User [id=1,name=eric],User [id=2,name=john]]
page:User [page=1,size=10,total=2,data=[{id=1.0,name=eric},{id=2.0,name=john}]]
用户1:用户[ id=1,name=eric]