Gson的基本用法
服务器返回的JSON数据:
"user": [
{
"name": "zhangsan",
"age": "10"
}
]
首先,编写一个对象类bean:
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString()
{
return name + ":" +age;
}
}
如果你和我一样是Android studio用户,可以使用插件GsonFormat自动生成bean类。
然后:
User mUser = new Gson().fromJson(jsonObject.getString("user"),User.class);
就可以生成一个user对象来操作。
那么服务器如果返回user数组怎么办呢?
类似这样的json:
"user": [
{
"name": "zhangsan",
"age": "10"
},
{
"name": "lisi",
"age": "8"
},
{
"name": "wangwu",
"age": "12
}
]
这种情况,网上挺多人是使用jsonarray,遍历array一个一个user的取,然后装进集合。其实不必那么麻烦。
先上代码:
List mUsers = gson.fromJson(jsonObject.getString("user"), new TypeToken>() {
}.getType());
还是可以一行代码搞定。这个东西是不是有点意思呢?
import com.google.gson.reflect.TypeToken;
查阅源码可以得知,这是一个反射类,可以跟据你传的数据类型,利用反射取到你定义的字段并赋值。比如List。
灰常强大且实用。
大部分开发者会抽取一个解析类来解析不一样的数据类型,如果数据类型不是bean是泛型T,那如何用Gson来解析呢?
泛型解析,先上代码:
class GsonParse{
public T parseJson(String jsonString) {
ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
return new Gson().fromJson(jsonString, actualTypeArguments[0]);
}
}
然后使用这个类去解析上面的数据。
List mUsers =new GsonParse>.parseJson(jsonObject.getString("user"));
就可以解析成你想要的List类型了,是不是很实用呢?
通过查阅源码可以得知,这原理是通过父类可以得到传进来的泛型类型,我们只传递了一个泛型,
直接取第0个角标上的值就行了。
网友评论