版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a249900679/article/details/51386028
项目地址:
Github:https://github.com/smileysx/GsonTest
Oschina:https://git.oschina.net/ysx_xx/GsonText
详解Gson使用(一)简单对象转化
http://blog.csdn.net/a249900679/article/details/51385913
详解Gson使用(二)带泛型的List转化
http://blog.csdn.net/a249900679/article/details/51386028
详解Gson使用(三)使用注解
http://blog.csdn.net/a249900679/article/details/51386509
http://blog.csdn.net/a249900679/article/details/51386660
详解Gson使用(五)实现百度翻译功能
http://blog.csdn.net/a249900679/article/details/51386727
有时候,我们得到的json数据并不是只有一条数据,可能是一个数组类型的,这时我们就不能像上一篇文章一样解析成一个对象了,那该怎么办呢?难道要像上一篇的第三个例子,在对象中嵌套一个List类型数据?其实不需要这么麻烦,Gson有提供另一种方法,支持将数组型的json数据转换为泛型的List,下面来看看怎么使用:
这里的对象实体类同上一篇一样,代码就不贴出来,直接来看看如何将带泛型的List转换为json数据:
public class ToJsonTest extends Activity {
private TextView show;
private Button start;
private Gson gson;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
}
private void initData() {
gson = new Gson();
show = (TextView) findViewById(R.id.showtext);
start = (Button) findViewById(R.id.send);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showData();
}
});
}
private void showData() {
String resultString = "";
resultString += two() + "\n\n";
show.setText(resultString);
}
private String two() {
List<ToJsonBeanOne> toJsonBeanOnes = new ArrayList<ToJsonBeanOne>();
for (int i = 1; i < 5; ++i) {
ToJsonBeanOne toJsonBeanOne = new ToJsonBeanOne(i, "小熊" + i, 21);
toJsonBeanOnes.add(toJsonBeanOne);
}
return gson.toJson(toJsonBeanOnes);
}
}
结果为:
接下来看看如何把json数据转换成带泛型的List:
public class FromJsonTest extends Activity {
/**
* 显示数据的textview
*/
private TextView show;
/**
* 按钮
*/
private Button start;
/**
* gson
*/
private Gson gson;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
}
private void initData() {
gson = new Gson();
show = (TextView) findViewById(R.id.showtext);
start = (Button) findViewById(R.id.send);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showData();
}
});
}
private void showData() {
String showString = "";
showString += two();
show.setText(showString);
}
private String two() {
List<ToJsonBeanOne> toJsonBeanOnes = new ArrayList<ToJsonBeanOne>();
for (int i = 1; i < 5; ++i) {
ToJsonBeanOne toJsonBeanOne = new ToJsonBeanOne(i, "小熊" + i, 21);
toJsonBeanOnes.add(toJsonBeanOne);
}
String jsonString = gson.toJson(toJsonBeanOnes);
Type type = new TypeToken<List<ToJsonBeanOne>>() {
}.getType();
List<ToJsonBeanOne> beanOnes = gson.fromJson(jsonString, type);
String showString = "";
showString += "json:" + jsonString + "\n解析后的数据:\n";
for (ToJsonBeanOne one : beanOnes) {
showString += one.toString() + "------\n";
}
showString += "----------------------\n";
return showString;
}
}
结果为:
其他对象中嵌套对象、对象中嵌套List的解析也是这样,序列化比较简单,反序列化需要用到:
Type type = new TypeToken<List<ToJsonBeanOne>>() {}.getType();
List<ToJsonBeanOne> beanOnes = gson.fromJson(jsonString, type);