今天,对Gson解释json字串做了一个验证,以便以后快速的使用Gson对json串进行解释(只验证使用,没追究源码)。
一、首先对验证后的结果作一个总结:
1.如果json串的第一个字符是"{",不管对象里是否含有子的对象数组,则直接用正常的对象.class进行解释即可。
{
"name": "Google",
"info": [{ "subject":"Android"},
{ "tools":"Google 搜索"},
{ "action":"Google 翻译"}]
}
即假设上面的json串用aaa表示,其对应的对象为DataEntity, 那么只需
DataEntity datas3 = gson.fromJson(aaa, DataEntity.class);
2.如果json串的第一个字符是"[",则需要用new TypeToken<List<Bean>>(){}.getType() 进行解释。
[{
"name": "Google",
"info": "Android"
},
{
"name": "Runoob",
"info": "菜鸟教程"
},
{
"name": "Taobao",
"info": "淘宝"
}]
假设上面json串用aa表示,对应的对象为Entity,则需要
List<Entity> datas2 = gson.fromJson(aa, new TypeToken<List<Entity>>(){}.getType());
[{
"name": "Google",
"info": [{ "subject":"Android"},
{ "tools":"Google 搜索"},
{ "action":"Google 翻译"}]
},
{
"name": "Runoob",
"info": [{ "subject":"菜鸟教程"},
{ "tools":"菜鸟工具"},
{ "action":"菜鸟微信"}]
},
{
"name": "Taobao",
"info": [{ "subject":"淘宝"},
{ "tools":"网购"}]
}]
类似于上面 datas2 一样使用 new TypeToken<List<Entity>>(){}.getType() 。
假设json串用a表示,对应的对象为DataBean,则为
List<DataBean> datas = gson.fromJson(a, new TypeToken<List<DataBean>>(){}.getType());
二、验证结果
1.json串为:
[{
"name": "Google",
"info": [{ "subject":"Android"},
{ "tools":"Google 搜索"},
{ "action":"Google 翻译"}]
},
{
"name": "Runoob",
"info": [{ "subject":"菜鸟教程"},
{ "tools":"菜鸟工具"},
{ "action":"菜鸟微信"}]
},
{
"name": "Taobao",
"info": [{ "subject":"淘宝"},
{ "tools":"网购"}]
}]结果:2.json串为:
[{
"name": "Google",
"info": "Android"
},
{
"name": "Runoob",
"info": "菜鸟教程"
},
{
"name": "Taobao",
"info": "淘宝"
}]结果:3.json串为:
{
"name": "Google",
"info": [{ "subject":"Android"},
{ "tools":"Google 搜索"},
{ "action":"Google 翻译"}]
}
结果:
所以只要看json串的第一个字符就知道如何解释了。