GSON的使用

Gson(A Java serialization/deserialization library to convert Java Objects into JSON and back)
是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。能夠將一個 JSON 字符串轉成一個 Java 對象,或者反過來。

 1. Gson Goals

    • 提供簡單的toJson()fromJson()方法的Java對象轉換爲JSON,反之亦然
    • 容許將先前存在的不可修改對象轉換爲JSON或從JSON轉換
    • 普遍的Java泛型支持
    • 容許對象的自定義表示
    • 支持任意複雜的對象(具備深層繼承層次結構和泛型類型的普遍使用)

 2. GSON生成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

相關文章
相關標籤/搜索