使用Google GSON:额外的赠品:第一部分
介紹
這是以前的Google GSON入門的后續文章,其中顯示了有關使用Google Gson的入門資料。
本文顯示了GSON庫的一些其他優點。 由于有很多關于這些額外功能的文章要寫,所以我將長篇文章分成2個系列,因此,這是其中一部分,在下一篇文章中,我將發布其余內容。
使用GSON庫的好處在于,它不需要任何注釋或配置即可進行簡單轉換。 盡管它使用默認配置來使事情變得簡單。 GSON具有從Java對象創建Json的靈活性,反之亦然。 我們真正的Gson類包含json轉換的許多默認值,但是我們可以使用GsonBuilder類覆蓋默認值。 因此,讓我們開始吧。
漂亮格式的JSON輸出
當您打印使用Gson創建的json輸出字符串時,您將在一行中看到輸出,如下所示
{"name":"ajduke","languagesKnown":["Java","Scala","JavaScript"]}這是稱為壓縮模式的默認格式化模式。 當您的json具有很多字段和組件時,閱讀起來會變得更加困難。 為了正確格式化,該庫具有漂亮的漂亮格式化模式,該模式將每一字段打印在一行中
要使用此功能,您需要使用GsonBuilder#setPrettyPrinting()創建Gson實例,如以下清單所示
以下是我們的類,其對象將轉換為其json表示形式,
class Developer {private String name;private String classz;List<String> languagesKnown;public Developer() {name = "ajduke";languagesKnown = new ArrayList<>();languagesKnown.add("Java");languagesKnown.add("Scala");languagesKnown.add("Ruby");} }注意行號 7個使用,
Gson gson = new Gson(); String json = gson.toJson(new Developer()); System.out.println("********* Compact mode ***********"); System.out.println(json);GsonBuilder gsonBuilder = new GsonBuilder(); Gson prettyGson = gsonBuilder.setPrettyPrinting().create(); json = prettyGson.toJson(new Developer()); System.out.println("\n ******* Pretty formatting *********"); System.out.println(json);上面的輸出是
********* Compact mode *********** {"name":"ajduke","languagesKnown":["Java","Scala","Ruby"]}******* Pretty formatting ********* {"name": "ajduke","languagesKnown": ["Java","Scala","Ruby"] }在JSON輸出中包含空字段
默認情況下,在轉換為Json格式時,在轉換中會忽略空值字段。 這僅僅是為了使輸出清晰緊湊。
但是我們可以通過使用GsonBuilder #serializeNulls()創建Gson實例來覆蓋此行為。 以下清單顯示
class Developer {private String name;private String classz;List<String> languagesKnown;public Developer() {name = "ajduke";classz= "Developer";languagesKnown = new ArrayList<>();languagesKnown.add("Java");languagesKnown.add("Scala");languagesKnown.add("Ruby");} }請注意第.11行
Gson gson = new Gson();System.out.println("Default behaviour "); GsonBuilder gsonBuilder = new GsonBuilder();Gson prettyGson = gsonBuilder.setPrettyPrinting().create(); String json = prettyGson.toJson(new Developer()); System.out.println(json);System.out.println("Including the nulls "); Gson includeNullsGson = gsonBuilder.serializeNulls().create(); String json2 = includeNullsGson.toJson(new Developer()); System.out.println(json2);注意上面的輸出,包括classz
Default behaviour {"name": "ajduke","languagesKnown": ["Java","Scala","Ruby"] } Including the nulls {"name": "ajduke","classz": null,"languagesKnown": ["Java","Scala","Ruby"] }包括自定義名稱
默認情況下,json輸出字段名稱與類字段名稱相同。 Gson提供了使用注釋更改此方法的方法。
為此,我們需要使用為該字段提供的@serilizedName批注,我們需要在輸出json中更改名稱。
因此,我們的Developer類將名稱更改為firstName
class Developer {@SerializedName("firstName")private String name;private String classz;List<String> languagesKnown;public Developer() {name = "ajduke";languagesKnown = new ArrayList<>();languagesKnown.add("Java");languagesKnown.add("Scala");languagesKnown.add("Ruby");} }如果我們跟隨
Gson gson = new Gson(); String json = gson.toJson(new Developer()); System.out.println("********* Compact mode ***********"); System.out.println(json);GsonBuilder gsonBuilder = new GsonBuilder(); Gson prettyGson = gsonBuilder.setPrettyPrinting().create(); json = prettyGson.toJson(new Developer()); System.out.println("\n ******* Pretty formatting *********"); System.out.println(json);然后在輸出中,我們將使用“ firstName”而不是“ name”
********* Compact mode *********** {"firstName":"ajduke","languagesKnown":["Java","Scala","Ruby"]}******* Pretty formatting ********* {"firstName": "ajduke","languagesKnown": ["Java","Scala","Ruby"] }向/從流寫入JSON
Gson庫對每個方法toJson()和fromJson()都有一個重載,分別用于寫入和讀取流。 簡單來說,您可以將json輸出寫入文件,字符或緩沖區,并且可以從任何Reader流中讀取。
以下清單顯示了如何在File流中寫入和讀取JSON
package in.ajduke.ap013;import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List;import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName;public class GsonEx {public static void main(String[] args) throws IOException {Gson gson = new Gson();System.out.println("Writing JSON to file ....");// using try with resourcestry (FileWriter writer = new FileWriter("d:/output.json")) { gson.toJson(new Developer(), writer); // writing to file}System.out.println("Reading from file.. ");FileReader fileReader = new FileReader("d:/output.json");dev= gson.fromJson(fileReader, Developer.class);System.out.println(dev);} }class Developer {private String name;private String classz;List<String> languagesKnown;public Developer() {name = "ajduke";languagesKnown = new ArrayList<>();languagesKnown.add("Java");languagesKnown.add("Scala");languagesKnown.add("Ruby");}@Overridepublic String toString() {return "Developer [name=" + name + ", classz=" + classz+ ", languagesKnown=" + languagesKnown + "]";} } 參考: 使用Google GSON:額外的東西:來自ajduke博客博客的JCG合作伙伴 Abhijeet Sutar的 第一部分 。翻譯自: https://www.javacodegeeks.com/2014/01/using-google-gson-extra-goodies-part-i.html
總結
以上是生活随笔為你收集整理的使用Google GSON:额外的赠品:第一部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国债逆回购可以炒吗?
- 下一篇: 使用Google GSON:额外的赠品: