1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      JavaJsonAPI中Gson怎么用

      這篇文章主要介紹了Java Json API中Gson怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

      江岸ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

      GSON是Google開發(fā)的Java API,用于轉(zhuǎn)換Java對象和Json對象。

      下載與安裝

      在使用GSON API工作之前,你需要下載庫(jar文件),并將其包含到類路徑中。庫,連同源代碼和Java文檔,都可以從http://code.google.com/p/google-gson/downloads/list下載。下載完畢后,添加gson-.jar到類路徑。對于那些偏好使用Maven管理依賴(JAR文件)的讀者,添加如下依賴到pom.xml。

           com.google.code.gson     gson     2.2.4 

      需要修改 2.2.4。本文所有代碼示例使用上面列出的版本。pom.xml文件拷貝可以在這里找到。

      如果這個庫用于web應(yīng)用,請確保在WEB-INF/lib文件夾中保持一份拷貝。或者,GSON庫可以放到應(yīng)用服務(wù)器提供給web應(yīng)用。

      一個簡單示例

      GSON API提供一個類文件,Gson(Java文檔),它被用來處理Java和JSON對象的轉(zhuǎn)換。可以調(diào)用默認(rèn)構(gòu)造器,或如下代碼的形式,使用GsonBuilder(Java文檔)類創(chuàng)建這個類的實例。GsonBuilder類是可定制化的,并且允許開發(fā)者按需實例化Gson。

      package com.javacreed.examples.gson.part1;  import com.google.gson.Gson; import com.google.gson.GsonBuilder;  public class SimpleExample1 {     public static void main(String[] args) {         Gson gson = new GsonBuilder().create();         gson.toJson("Hello", System.out);         gson.toJson(123, System.out);     } }

      在上面的例子中,我們創(chuàng)建了一個Gson實例,并把Java String和int轉(zhuǎn)化為JSON對象。以上代碼命令行里的輸出結(jié)果如下:

      "Hello"123

      這不是火箭科學(xué),但它是一個開始。注意,上述的結(jié)果都將輸入到命令行。該toJason()方法有兩個參數(shù),Java對象轉(zhuǎn)換為JSON和可追加(Java的文檔)的一個實例。我們可以很容易地改變了一個文件或網(wǎng)絡(luò)流。

      package com.javacreed.examples.gson.part1;  import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import com.google.gson.Gson; import com.google.gson.GsonBuilder;  public class SimpleExample2 {     public static void main(String[] args) throws IOException {         Writer writer = new FileWriter("Output.json");          Gson gson = new GsonBuilder().create();         gson.toJson("Hello", writer);         gson.toJson(123, writer);          writer.close();     } }

      注意

      為什么變量聲明為Writer類型,而實際類型是FileWriter?

      盡量使用泛型是一個很好的方法。在上例中,我們只使用了Appendable和Writer接口定義的方法。使用泛型使代碼更易于移植和維護(hù),下面是個不好的例子。

      注意,上面例子中,我們沒有正確處理流(Writer)。理想情況下,資源在finaly塊 (教程) 中關(guān)閉或者用在try-with-resource(教程)中。我們忽略了這個是為了保持代碼簡潔。\

      public static void main(String[] args) throws IOException {     try (Writer writer = new FileWriter("Output.json")) {         Gson gson = new GsonBuilder().create();         gson.toJson("Hello", writer);         gson.toJson(123, writer);     } }

      以上代碼生成文件:包含JSON對象的Output.json。注意,這里我們使用了字符流而不是字節(jié)流。因為toJson()方法需要一個 Appendanble實例,而字節(jié)流不能實現(xiàn)Appendable接口,所以我們使用了字符流。Appendable接口處理字符而不是字節(jié)。Java 提供了InputStreanReader(Java文檔)和OutputStreamWriter(Java文檔)類進(jìn)行字節(jié)流與字符流的轉(zhuǎn)換,如下面的例子。

      注意

      注意,使用InputStreamREader和OutputStreamWriter類時,如果不提供編碼或者字符集,轉(zhuǎn)換將使用平臺默認(rèn)字符集。這將降低代碼的可移植性,且在其他平臺上運(yùn)行將可能產(chǎn)生錯誤行為。

      package com.javacreed.examples.gson.part1;  import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import com.google.gson.Gson; import com.google.gson.GsonBuilder;  public class SimpleExample3 {      public static void main(String[] args) throws IOException {         try(Writer writer = new OutputStreamWriter(new FileOutputStream("Output.json") , "UTF-8")){             Gson gson = new GsonBuilder().create();             gson.toJson("Hello", writer);             gson.toJson(123, writer);         }     } }

      如你所見,我們只需要改變實例的一部分。代碼的剩余部分沒有任何變化。這就是使用接口代替類作為變量類型的好處之一。

      使用JSON對象

      比方說,我們需要使用JSON對象并加載他們?yōu)镴ava對象。假設(shè)web服務(wù)器查詢時產(chǎn)生如下JSON對象:

      {   NAME:"Albert Attard",   P_LANGUAGE:"Java",   LOCATION:"Malta" }

      此JSON對象包含3個不同值的域。比如我們需要使用JSON對象并創(chuàng)建一個Java對象來展示它。為了使這個例子更有趣,假設(shè)我們只關(guān)心name和location域。

      首先創(chuàng)建一個Java類來表示name和location。類命名為Person。類的名字無關(guān)緊要,但域的名字必須一致。域名必須匹配(大小寫敏 感)JSON對象中的名字。更進(jìn)一步,類必須包含一個默認(rèn)構(gòu)造函數(shù)(即使它被設(shè)置為private)。如下所示,name和location域在JSON 中是大寫的。JSON中域P_LANGUAGE被忽略了,因為Java對象中不包括該名稱的域。請理解域名不遵守Java命名規(guī)范,暫時只是為了簡化。更 多內(nèi)容將在第2部分中討論。

      package com.javacreed.examples.gson.part2;  public class Person {     private String NAME;     private String LOCATION;      // Getters and setters are not required for this example.     // GSON sets the fields directly using reflection.      @Override     public String toString() {         return NAME + " - " + LOCATION;     } }

      準(zhǔn)備好Java對象后,我們可以讀取JSON對象并加載為Java對象,如下代碼所示。為了模擬真實情況,我們使用了字節(jié)流作為輸入。還要注意,JSON內(nèi)容保存在resource文件夾的文件里(這不是常規(guī)做法)。

      package com.javacreed.examples.gson.part2;  import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import com.google.gson.Gson; import com.google.gson.GsonBuilder;  public class JsonToJava {      public static void main(String[] args) throws IOException {         try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("/Server1.json"), "UTF-8")){             Gson gson = new GsonBuilder().create();             Person p = gson.fromJson(reader, Person.class);             System.out.println(p);         }     } }

      輸出如下:

      Albert Attard - Malta

      Gson解析JSON對象并創(chuàng)建了一個Person類的實例,并打印到命令行中。

      嵌套JSON對象

      讓我們對上面的例子更進(jìn)一步,以下所示JSON代碼段包含了一個嵌套對象。

      {   NAME:"Albert Attard",   P_LANGUAGE:"Java",   LOCATION:"Malta",   EXAM: {     SUBJECT:"Programming",     GRADE:4.5   } }

      EXAM域由兩個域組成,分別是SUBJECT和GRADE。我們需要修改Person類的定義來包含EXAM域,并創(chuàng)建一個新的Java類來表示EXAM,該類包含SUBJECT和GRADE域。

      我們首先創(chuàng)建新的類來表示嵌套對象。就像之前討論那樣,類名無關(guān)緊要,但是域名必須與JSON中的域名匹配。

      package com.javacreed.examples.gson.part3;  public class Exam {     private String SUBJECT;     private double GRADE;      // Getters and setters are not required for this example.     // GSON sets the fields directly using reflection.      @Override     public String toString() {         return SUBJECT + " - " + GRADE;     } }

      現(xiàn)在我們可以修改Person類,引入一個與JSON中EXAM同名的域,類型為Exam。注意,下面的Person類與前一個位于不同的包。

      package com.javacreed.examples.gson.part3;  public class Person {      private String NAME;     private String LOCATION;     private Exam EXAM;      @Override     public String toString() {         return NAME + " - " + LOCATION + " (" + EXAM + ")";     } }

      注意,所需的變化是最小的,因為Gson動態(tài)發(fā)現(xiàn)(使用反射)類和它的域。本文不包含反射,對于更多關(guān)于反射的信息,請參考:Reflection in Action.

      ***,讓我們嘗試新的變化。

      package com.javacreed.examples.gson.part3;  import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import com.google.gson.Gson; import com.google.gson.GsonBuilder;  public class JsonToJava {      public static void main(String[] args) throws IOException {         try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("/Server2.json"), "UTF-8")){             Gson gson = new GsonBuilder().create();             Person p = gson.fromJson(reader, Person.class);             System.out.println(p);         }     } }

      JsonToJava類沒有做任何改變,因為Gson使用了模型(Person和Exam類)將Json映射成Java。

      結(jié)論

      即使JSON可能是一個新概念,但它十分簡單與直接。此外,相比于需要增加標(biāo)簽進(jìn)行消息/數(shù)據(jù)轉(zhuǎn)換而不斷膨脹的笨重的XML,它因為簡單更加流行。 需要指出JSON是JavaScript的一個子集,JavaScript將它作為一個***的方案來進(jìn)行數(shù)據(jù)交換,例如網(wǎng)頁。GSON  API使它更便于使用,即使在這里沒有討論的部分,它也提供了強(qiáng)大的靈活性。

      感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java Json API中Gson怎么用”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


      文章標(biāo)題:JavaJsonAPI中Gson怎么用
      轉(zhuǎn)載來源:http://www.ef60e0e.cn/article/psccgp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        依兰县| 徐州市| 边坝县| 明光市| 商丘市| 孙吴县| 彰武县| 平阳县| 元谋县| 莱阳市| 衡水市| 茌平县| 方城县| 永昌县| 久治县| 苗栗县| 新疆| 阜城县| 封开县| 景泰县| 禹州市| 岢岚县| 类乌齐县| 牡丹江市| 江达县| 山阴县| 修水县| 施秉县| 娱乐| 南安市| 含山县| 福清市| 哈密市| 郴州市| 启东市| 晋中市| 永和县| 定南县| 武邑县| 乳源| 黄陵县|