详解Gson使用(二)带泛型的List转化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a249900679/article/details/51386028

项目地址:

Githubhttps://github.com/smileysx/GsonTest

Oschinahttps://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);



猜你喜欢

转载自blog.csdn.net/a249900679/article/details/51386028