項目位址:
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
詳解Gson使用(四)Map對象轉化
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);