转自:http://www.cnblogs.com/chenlhuaf/archive/2011/05/01/gson_test.html
旁白:
作者已经写的不错了,我只是在看完之后,作者的基础上加工一下,希望能对大家有所帮助!
经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。
正文:
简单的例子:
1. 创建一个javabean:
package com.hello.hello; public class Person { private String name; private int age; /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age * the age to set */ public void setAge(int age) { this.age = age; } @Override public String toString() { return name + ":" + age; } }
2. 测试map2json、bean2json、json2map、json2bean的方法:
package com.hello.hello; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import com.google.gson.Gson; public class HelloGson { // @Test public void testBean2Json() { Gson gson = new Gson(); List<Person> persons = new ArrayList<Person>(); for (int i = 0; i < 10; i++) { Person p = new Person(); p.setName("name" + i); p.setAge(i * 5); persons.add(p); } String str = gson.toJson(persons); System.out.println(str); } // @Test public void testListMap2Json() { Gson gson = new Gson(); List<Map<String, String>> mapList = new ArrayList<Map<String, String>>(); for (int i = 0; i < 10; i++) { Map<String, String> map = new HashMap<String, String>(); map.put("name", "name" + i); map.put("age", i * 5 + ""); mapList.add(map); } String str = gson.toJson(mapList); System.out.println(str); } @SuppressWarnings("unchecked") @Test public void testMap2Json() { Gson gson = new Gson(); Map<String, String> map = new HashMap<String, String>(); map.put("name", "test"); map.put("age", "20"); String str = gson.toJson(map); System.out.println(str); Map<String,String> mapTemp = gson.fromJson(str, Map.class); System.out.println(mapTemp); } }
实体很简单,两个字段,当然实体中的字段也可以是List或者Set类型的;
代码重点是Gson对象,它提供了toJason()方法将对象转换成Json字符串。
3. 下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。
在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构。
先来看第一种:
比如json字符串为:[{"name":"name0","age":0}]
代码:
Person person = gson.fromJson(str, Person.class);
提供两个参数,分别是json字符串以及需要转换对象的类型。
第二种,转换成列表类型:
代码:
List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
for(int i =0; i < ps.size() ; i++)
{
Person p = ps.get(i);
System.out.println(p.toString());
}
for(int i =0; i < ps.size() ; i++)
{
Person p = ps.get(i);
System.out.println(p.toString());
}
可以看到上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。
Gson的基本使用就是这么多,至于annotation方面可以参考gson的官方文档,希望能对初学java和gson的同学有所帮助。