Gson是Google的一個開源項目,可以將Java對象轉換成JSON,也可能將JSON轉換成Java對象。
Gson裏最重要的對象有2個Gson 和 GsonBuilder
Gson有2個最基本的方法
1) toJson() – 轉換java 對象到JSON
2) fromJson() – 轉換JSON到java對象
對於泛型對象,使用fromJson(String, Type)方法來將Json對象轉換成對應的泛型對象
new TypeToken<>(){}.getType()方法取得Type
如: new TypeToken<List<String>>(){}.getType()
new TypeToken<List<Person>>(){}.getType()
new TypeToken<List<Map<String, String>>>(){}.getType()
GsonBuilder
//注意這裏的Gson的構建方式爲GsonBuilder,區別於Gson gson = new Gson();
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation() //不導出實體中沒有用@Expose註解的屬性
.enableComplexMapKeySerialization() //支持Map的key爲複雜對象的形式
.serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//時間轉化爲特定格式
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//會把字段首字母大寫,注:對於實體上使用了@SerializedName註解的不會生效.
.setPrettyPrinting() //對json結果格式化.
.setVersion(1.0) //有的字段不是一開始就有的,會隨着版本的升級添加進來,那麼在進行序列化和返序列化的時候就會根據版本號來選擇是否要序列化.
//@Since(版本號)能完美地實現這個功能.還的字段可能,隨着版本的升級而刪除,那麼
//@Until(版本號)也能實現這個功能,GsonBuilder.setVersion(double)方法需要調用.
.create();
參考閱讀
Json轉換利器Gson之實例一-簡單對象轉化和帶泛型的List轉化 http://blog.csdn.net/lk_blog/article/details/7685169
Json轉換利器Gson之實例二-Gson註解和GsonBuilder http://blog.csdn.net/lk_blog/article/details/7685190
Json轉換利器Gson之實例三-Map處理(上) http://blog.csdn.net/lk_blog/article/details/7685210
Json轉換利器Gson之實例四-Map處理(下) http://blog.csdn.net/lk_blog/article/details/7685224
Json轉換利器Gson之實例五-實際開發中的特殊需求處理 http://blog.csdn.net/lk_blog/article/details/7685237 重要
Json轉換利器Gson之實例六-註冊TypeAdapter及處理Enum類型 http://blog.csdn.net/lk_blog/article/details/7685347 不常用
代碼
輔助類
public class JsonService
{
public Person getPerson()
{
Person person = new Person(1, "xiaoluo", "廣州");
return person;
}
public List<Person> getPersons()
{
List<Person> persons = new ArrayList<Person>();
Person person = new Person(1, "xiaoluo", "廣州");
Person person2 = new Person(2, "android", "上海");
persons.add(person);
persons.add(person2);
return persons;
}
public List<String> getString()
{
List<String> list = new ArrayList<String>();
list.add("廣州");
list.add("上海");
list.add("北京");
return list;
}
public List<Map<String, String>> getMapList()
{
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map1 = new HashMap<String, String>();
map1.put("id", "001");
map1.put("name", "xiaoluo");
map1.put("age", "20");
Map<String, String> map2 = new HashMap<String, String>();
map2.put("id", "002");
map2.put("name", "android");
map2.put("age", "33");
list.add(map1);
list.add(map2);
return list;
}
}
測試類
public static void main(String[] args)
{
Gson gson = new Gson();
JsonService jsonService = new JsonService();
Person person = jsonService.getPerson();
System.out.println("person: " + gson.toJson(person));
// 對於Object類型,使用 fromJson(String, Class)方法來將Json對象轉換成Java對象
Person person2 = gson.fromJson(gson.toJson(person), Person.class);
System.out.println(person2);
System.out.println("------------------------------------------------");
List<Person> persons = jsonService.getPersons();
System.out.println("persons: " + gson.toJson(persons));
/*
* 對於泛型對象,使用fromJson(String, Type)方法來將Json對象轉換成對應的泛型對象
* new TypeToken<>(){}.getType()方法
*/
List<Person> persons2 = gson.fromJson(gson.toJson(persons), new TypeToken<List<Person>>(){}.getType());
System.out.println(persons2);
System.out.println("------------------------------------------------");
List<String> list = jsonService.getString();
System.out.println("String---->" + gson.toJson(list));
List<String> list2 = gson.fromJson(gson.toJson(list), new TypeToken<List<String>>(){}.getType());
System.out.println("list2---->" + list2);
System.out.println("------------------------------------------------");
List<Map<String, String>> listMap = jsonService.getMapList();
System.out.println("Map---->" + gson.toJson(listMap));
List<Map<String, String>> listMap2 = gson.fromJson(gson.toJson(listMap), new TypeToken<List<Map<String, String>>>(){}.getType());
System.out.println("listMap2---->" + listMap2);
System.out.println("------------------------------------------------");
}
輸出結果
person: {"id":1,"name":"xiaoluo","address":"廣州"}
Person [id=1, name=xiaoluo, address=廣州]
------------------------------------------------
persons: [{"id":1,"name":"xiaoluo","address":"廣州"},{"id":2,"name":"android","address":"上海"}]
[Person [id=1, name=xiaoluo, address=廣州], Person [id=2, name=android, address=上海]]
------------------------------------------------
String---->["廣州","上海","北京"]
list2---->[廣州, 上海, 北京]
------------------------------------------------
Map---->[{"id":"001","age":"20","name":"xiaoluo"},{"id":"002","age":"33","name":"android"}]
listMap2---->[{id=001, age=20, name=xiaoluo}, {id=002, age=33, name=android}]
------------------------------------------------