天天看點

詳解Gson使用(二)帶泛型的List轉化

項目位址:

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);
	}
}
           

結果為:

詳解Gson使用(二)帶泛型的List轉化

接下來看看如何把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;
	}
}
           

結果為:

詳解Gson使用(二)帶泛型的List轉化

其他對象中嵌套對象、對象中嵌套List的解析也是這樣,序列化比較簡單,反序列化需要用到:

Type type = new TypeToken<List<ToJsonBeanOne>>() {}.getType();
List<ToJsonBeanOne> beanOnes = gson.fromJson(jsonString, type);