Gson(A Java serialization/deserialization library to convert Java Objects into JSON and back)
是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。能夠將一個 JSON 字符串轉成一個 Java 對象,或者反過來。
toJson()
和fromJson()
方法的Java對象轉換爲JSON,反之亦然2.1 首先在pom.xml加入依賴(Maven建立)java
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version> </dependency>
2.2 爲JavaBean實例賦值以後,生成Gson對象,並利用toJson(object)方法將數據轉換爲json格式git
import com.google.gson.Gson; public class GsonCreateSimple { public static void main(String[] args) { //1.建立Person對象,利用set()方法賦值 Person xiaofeng=new Person(); xiaofeng.setName("小峯"); xiaofeng.setAge(22.5); xiaofeng.setGirlfriend(true); xiaofeng.setMajor(new String[]{"唱歌","coding"}); //2.建立一個Gson對象,並利用toJson(object)方法將數據轉換爲json格式 Gson gson =new Gson(); System.out.println(gson.toJson(xiaofeng)); } }
輸出Json格式:github
2.3 修正的方法 tipsjson
2.3.1 @SerializedName註解數組
有時須要在輸出的Json數據中顯示本身想要的效果而不能直接修改JavaBean屬性名稱時(好比上例想要將 "name" 轉換爲 「名字」 輸出在控制檯),能夠在JavaBean類裏想要轉換的屬性前加上該註解@SerializedName(「想要顯示的內容」)。數據結構
上例:修改Person類,在屬性「name」前加上註解ui
控制檯輸出:google
2.3.2 GsonBuilder(用於對json數據美化,或者個性化輸出)spa
public class GsonCreateSimple { public static void main(String[] args) { //1.建立Person對象,利用set()方法賦值 Person xiaofeng=new Person(); xiaofeng.setName("小峯"); xiaofeng.setAge(22.5); xiaofeng.setGirlfriend(true); xiaofeng.setMajor(new String[]{"唱歌","coding"});
//2.建立一個Gson對象,並利用toJson(object)方法將數據轉換爲json格式 //Gson gson =new Gson(); GsonBuilder gsonBuilder=new GsonBuilder(); gsonBuilder.setPrettyPrinting(); //將json數據按層次格式輸出,更直觀,經常使用於調試 //爲json數據輸出添加邏輯 gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() { public String translateName(Field field) { if(field.getName().equals("age")){ return "今年多大了啊:"; } return field.getName(); } });
Gson gson=gsonBuilder.create(); System.out.println(gson.toJson(xiaofeng)); } }
該demo將json數據結構化輸出,並將屬性 「age」個性化輸出:調試
注意:輸出json數據時,會將屬性名輸出,若是不想輸出該屬性,可在聲明屬性時使用transient修飾,這樣即便賦值也不會輸出了
private transient String ignore;
3. GSON 解析
JSONObject能夠將*.json文件解析成一個它的對象;Gson能夠正向的生成,也能夠解析成本身定義的一個JavaBean的對象。
xiaofeng.json
{"birthday":"1999-11-22","girlfriend":"true","major":["sing","coding"],"school":"Qinghua University","car":null,"name":"小峯","comment":"JSON裏不能直接使用註釋,須要添加時可經過此方式。。","age":22}
解析demo:ReadGson.java
public class ReadGson { public static void main(String[] args) throws IOException {
// 獲取本文件路徑下的json文件 File file = new File(ReadJSON.class.getResource("/xiaofeng.json").getFile()); // 讀取json文件內容 String content = FileUtils.readFileToString(file);
//生成Gson對象,利用其fromJson(String json,Class<T> class)方法來解析Json數據,生成JavaBean對象 Gson gson =new Gson(); Person xiaofeng=gson.fromJson(content, Person.class); //輸出對象,此處JavaBean類有toString()方法,故可直接打印 System.out.println(xiaofeng); } }
注意:此處須要Person類的屬性和解析的 xiaofeng.json內的 key相對應。
4. GSON解析特殊格式(相較於JSON的優點所在)
4.1 帶日期轉換
在JSON裏Date格式須要設置爲String類型,而在Gson裏是能夠忽略這個問題的
下面demo中,在 PersonByGson類裏Birthday的屬性爲Date類型的,解析時再設置顯示的格式
// 獲取本文件路徑下的json文件 File file = new File(ReadJSON.class.getResource("/xiaofeng.json").getFile()); // 讀取json文件內容 String content = FileUtils.readFileToString(file); //生成Gson對象,利用其fromJson(String json,Class<T> class)方法來解析Json數據 //Gson gson =new Gson(); Gson gson =new GsonBuilder().setDateFormat("yyyy-MM-dd").create();//這裏經過建立GsonBuild對象來設置格式 PersonByGson xiaofeng=gson.fromJson(content, PersonByGson.class); //輸出日期 toLocaleString() System.out.println(xiaofeng.getBirthday().toLocaleString());
輸出日期格式:
4.2 集合類解析
將JavaBean類中數組格式屬性轉換爲List 集合屬性(注意相應修改setXx()和getXx()和toString()方法)
直接輸出(解析程序同上,自動匹配相應的ArrayList,屬性是Set格式的話是LinkedHashSet):
5. 對JSON庫做一總結:
功能:映射Java Object與json格式數據
1.經過Annotation註解來聲明 2.支持自定義屬性名稱 3.支持包含或排除屬性 4.支持自定義接口本身完成解析/生成過程
https://github.com/google/gson