使用Google GSON:额外的赠品:第一部分
介紹
這是以前的Google GSON入門的后續(xù)文章,其中顯示了有關(guān)使用Google Gson的入門資料。
本文顯示了GSON庫的一些其他優(yōu)點(diǎn)。 由于有很多關(guān)于這些額外功能的文章要寫,所以我將長(zhǎng)篇文章分成2個(gè)系列,因此,這是其中一部分,在下一篇文章中,我將發(fā)布其余內(nèi)容。
使用GSON庫的好處在于,它不需要任何注釋或配置即可進(jìn)行簡(jiǎn)單轉(zhuǎn)換。 盡管它使用默認(rèn)配置來使事情變得簡(jiǎn)單。 GSON具有從Java對(duì)象創(chuàng)建Json的靈活性,反之亦然。 我們真正的Gson類包含json轉(zhuǎn)換的許多默認(rèn)值,但是我們可以使用GsonBuilder類覆蓋默認(rèn)值。 因此,讓我們開始吧。
漂亮格式的JSON輸出
當(dāng)您打印使用Gson創(chuàng)建的json輸出字符串時(shí),您將在一行中看到輸出,如下所示
{"name":"ajduke","languagesKnown":["Java","Scala","JavaScript"]}這是稱為壓縮模式的默認(rèn)格式化模式。 當(dāng)您的json具有很多字段和組件時(shí),閱讀起來會(huì)變得更加困難。 為了正確格式化,該庫具有漂亮的漂亮格式化模式,該模式將每一字段打印在一行中
要使用此功能,您需要使用GsonBuilder#setPrettyPrinting()創(chuàng)建Gson實(shí)例,如以下清單所示
以下是我們的類,其對(duì)象將轉(zhuǎn)換為其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");} }注意行號(hào) 7個(gè)使用,
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輸出中包含空字段
默認(rèn)情況下,在轉(zhuǎn)換為Json格式時(shí),在轉(zhuǎn)換中會(huì)忽略空值字段。 這僅僅是為了使輸出清晰緊湊。
但是我們可以通過使用GsonBuilder #serializeNulls()創(chuàng)建Gson實(shí)例來覆蓋此行為。 以下清單顯示
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");} }請(qǐng)注意第.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"] }包括自定義名稱
默認(rèn)情況下,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庫對(duì)每個(gè)方法toJson()和fromJson()都有一個(gè)重載,分別用于寫入和讀取流。 簡(jiǎn)單來說,您可以將json輸出寫入文件,字符或緩沖區(qū),并且可以從任何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
總結(jié)
以上是生活随笔為你收集整理的使用Google GSON:额外的赠品:第一部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国债逆回购可以炒吗?
- 下一篇: 使用Google GSON:额外的赠品: