<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Gson – 快速指南 > 原文: [https://howtodoinjava.com/gson/google-gson-tutorial/](https://howtodoinjava.com/gson/google-gson-tutorial/) [**Gson**](https://sites.google.com/site/gson/ "google gson")(由 Google 提供)是可用于*將 Java 對象轉換為 JSON 字符串*的 Java 庫。 此外,它還可以用于*將 JSON 字符串轉換為等效的 Java 對象*。 還有其他一些 Java 庫也可以執行此轉換,但是 Gson 處于極少數情況,不需要任何預先注解的 Java 類或 Java 類的源代碼。 **Gson** 還支持舊的 Java 類,這些類中不支持泛型來提供類型信息。 它只是與這些舊式類一起正常工作。 在這個 **gson 教程**中,我僅給出一些示例,這些示例可以用 Gson 執行。 ```java Table of Contents 1\. Prerequisites and dependency 2\. Create Gson object 3\. Convert Java objects to JSON format 4\. Convert JSON to Java Objects 5\. Writing an Instance Creator 6\. Custom Serialization and De-serialization 7\. Pretty Printing for JSON Output Format 8\. Versioning Support 9\. More Gson Tutorials ``` ## 1.先決條件和依賴項 #### 1.1 POJO 類 在介紹示例之前,讓我們先準備一個 POJO 類,該類將在給定的示例中使用。 ```java public class Employee { private Integer id; private String firstName; private String lastName; private List<String> roles; public Employee(){ } public Employee(Integer id, String firstName, String lastName, Date birthDate){ this.id = id; this.firstName = firstName; this.lastName = lastName; } //Getters and setters @Override public String toString() { return "Employee [id=" + id + ", firstName=" + firstName + ", " + "lastName=" + lastName + ", roles=" + roles + "]"; } } ``` #### 1.2 Maven 依賴 ```java <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency> ``` 在 gradle 中,請使用以下依賴項。 ```java compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5' ``` ## 2.創建 Gson 對象 Gson 對象可以通過兩種方式創建。 第一種方法為您準備了快速的 Gson 對象,可以進行更快的編碼,而第二種方法使用`GsonBuilder`來構建更復雜的 Gson 對象。 ```java //1\. Default constructor Gson gson = new Gson(); //2\. Using GsonBuilder Gson gson = new GsonBuilder() .disableHtmlEscaping() .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) .setPrettyPrinting() .serializeNulls() .create(); ``` 使用`GsonBuilder`時,可以為`Gson`對象提供許多其他[有用選項](https://static.javadoc.io/com.google.code.gson/gson/2.7/com/google/gson/GsonBuilder.html)。 繼續檢查一下。 ## 3\. Gson `toJson() `– 將 Java 對象轉換為 JSON 字符串 要將**將對象轉換為 json**,請使用`toJson()`方法。 ```java Employee employee = new Employee(); employee.setId(1); employee.setFirstName("Lokesh"); employee.setLastName("Gupta"); employee.setRoles(Arrays.asList("ADMIN", "MANAGER")); Gson gson = new Gson(); System.out.println(gson.toJson(employee)); ``` 程序輸出。 ```java {"id":1,"firstName":"Lokesh","lastName":"Gupta","roles":["ADMIN","MANAGER"]} ``` ## 4\. 3\. Gson `fromJson()` – 將 JSON 字符串轉換為對象 要**將 json 解析為對象**,請使用 **`fromJson()`** 方法。 ```java Gson gson = new Gson(); System.out.println( gson.fromJson("{'id':1,'firstName':'Lokesh','lastName':'Gupta','roles':['ADMIN','MANAGER']}", Employee.class)); ``` 程序輸出: ```java Employee [id=1, firstName=Lokesh, lastName=Gupta, roles=[ADMIN, MANAGER]] ``` ## 5\. Gson `InstanceCreator`– 給定對象中不存在無參構造器時 在大多數情況下,即使任何類都不提供默認的無參數構造器, **Gson** 庫也足以創建實例。 但是,如果使用無參數構造器的類發現任何問題,則可以使用`InstanceCreator`支持。 使用它之前,您需要先向 Gson 注冊 Java 類類型的`InstanceCreator`。 例如,`Department`沒有任何默認構造器。 ```java public class Department { public Department(String deptName) { this.deptName = deptName; } private String deptName; public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } @Override public String toString() { return "Department [deptName="+deptName+"]"; } } ``` 我們的`Employee`類引用了`Department`: ```java public class Employee { private Integer id; private String firstName; private String lastName; private List<String> roles; private Department department; //Department reference //Other setters and getters } ``` 要正確使用`Department`類,我們需要為`Department`注冊一個`InstanceCreator`,如下所示: ```java class DepartmentInstanceCreator implements InstanceCreator<Department> { public Department createInstance(Type type) { return new Department("None"); } } ``` 現在,如下使用上述`InstanceCreator`。 ```java GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Department.class, new DepartmentInstanceCreator()); Gson gson = gsonBuilder.create(); System.out.println( gson.fromJson("{'id':1,'firstName':'Lokesh','lastName':'Gupta', 'roles':['ADMIN','MANAGER'],'department':{'deptName':'Finance'}}", Employee.class)); ``` 程序輸出: ```java Employee [id=1, firstName=Lokesh, lastName=Gupta, roles=[ADMIN, MANAGER], department=Department [deptName=Finance]] ``` ## 6\. Gson 自定義序列化和反序列化 很多時候,我們需要寫入/讀取不是 Java 對象默認表示形式的 JSON 值。 在這種情況下,我們需要編寫該 Java 類型的自定義序列化器和反序列化器。 在我們的示例中,我正在為`java.util.Date`類編寫序列化器和反序列化器,這將有助于以“`dd/MM/yyyy`”格式編寫日期格式。 #### 6.1 Gson 自定義序列化器 ```java import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.Date; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; public class DateSerializer implements JsonSerializer<Date> { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(dateFormat.format(date)); } } ``` #### 6.2 Gson 自定義反序列化器 ```java import java.lang.reflect.Type; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; public class DateDeserializer implements JsonDeserializer<Date> { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); public Date deserialize(JsonElement dateStr, Type typeOfSrc, JsonDeserializationContext context) { try { return dateFormat.parse(dateStr.getAsString()); } catch (ParseException e) { e.printStackTrace(); } return null; } } ``` #### 6.3 注冊自定義序列化器和反序列化器 現在,您可以在`GsonBuilder`中注冊這些串行器和反序列化器,如下所示: ```java GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer()); gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer()); ``` #### 6.4 Gson 自定義序列化器和反序列化器示例 串行器和反序列化器的完整示例如下。 ```java Employee employee = new Employee(); employee.setId(1); employee.setFirstName("Lokesh"); employee.setLastName("Gupta"); employee.setRoles(Arrays.asList("ADMIN", "MANAGER")); employee.setBirthDate(new Date()); GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer()); gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer()); Gson gson = gsonBuilder.create(); //Convert to JSON System.out.println(gson.toJson(employee)); //Convert to java objects System.out.println(gson.fromJson("{'id':1,'firstName':'Lokesh','lastName':'Gupta', 'roles':['ADMIN','MANAGER'],'birthDate':'17/06/2014'}" , Employee.class)); ``` 程序輸出: ```java {"id":1,"firstName":"Lokesh","lastName":"Gupta","roles":["ADMIN","MANAGER"],"birthDate":"17/06/2014"} Employee [id=1, firstName=Lokesh, lastName=Gupta, roles=[ADMIN, MANAGER], birthDate=Tue Jun 17 00:00:00 IST 2014] ``` ## 7\. Gson `setPrettyPrinting()` – 精美打印 JSON 輸出 Gson 提供的默認 JSON 輸出是緊湊的 JSON 格式。 這意味著在輸出 JSON 結構中將沒有任何空格。 要生成更具可讀性和美觀的 JSON,請使用`GsonBuilder`中的 `setPrettyPrinting()`。 ```java Gson gson = new GsonBuilder().setPrettyPrinting().create(); String jsonOutput = gson.toJson(employee); ``` 程序輸出: ```java { "id": 1, "firstName": "Lokesh", "lastName": "Gupta", "roles": [ "ADMIN", "MANAGER" ], "birthDate": "17/06/2014" } ``` ## 8\. Gson `setVersion()` - 版本支持 如果您正在使用的類文件已在不同版本中進行了修改,并且使用[`@Since`](https://code.google.com/p/google-gson/source/browse/trunk/gson/src/main/java/com/google/gson/annotations/Since.java "since")注解了字段,則可以使用此功能。 您需要做的就是使用`GsonBuilder`的`setVersion()`方法。 ```java GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer()); gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer()); //Specify the version like this gsonBuilder.setVersion(1.0); Gson gson = gsonBuilder.create(); ``` #### 8.1 `Employee.java`中以各種版本添加的字段 ```java public class Employee { @Since(1.0) private Integer id; private String firstName; private String lastName; @Since(1.1) private List<String> roles; @Since(1.2) private Date birthDate; //Setters and Getters } ``` #### Gson `@Since`示例 ```java //Using version 1.0 fields gsonBuilder.setVersion(1.0); Output: {"id":1,"firstName":"Lokesh","lastName":"Gupta"} ///////////////////////////////////////////////////////////// //Using version 1.1 fields gsonBuilder.setVersion(1.1); Output: {"id":1,"firstName":"Lokesh","lastName":"Gupta","roles":["ADMIN","MANAGER"]} ///////////////////////////////////////////////////////////// //Using version 1.2 fields gsonBuilder.setVersion(1.2); Output: {"id":1,"firstName":"Lokesh","lastName":"Gupta","roles":["ADMIN","MANAGER"],"birthDate":"17/06/2014"} ``` ## 9.更多的 Gson 教程 1. [Gson - `GsonBuilder`教程](https://howtodoinjava.com/library/gson-gsonbuilder-configuration/) 2. [Gson – 序列化和反序列化 JSON](https://howtodoinjava.com/library/gson-serialize-deserialize-json/) 3. [Gson – 序列化和反序列化映射](https://howtodoinjava.com/java/serialization/gson-serialize-deserialize-hashmap/) 4. [Gson – 序列化和反序列化集合](https://howtodoinjava.com/library/gson-serialize-deserialize-set/) 5. [Gson – 序列化和反序列化數組](https://howtodoinjava.com/library/gson-parse-json-array/) 6. [Gson - `@SerializedName`注解示例](https://howtodoinjava.com/library/gson-serializedname/) 7. [Gson- Jersey + Gson 示例](https://howtodoinjava.com/jersey/jax-rs-gson-example/) 這就是這個非常有用的 java gson 庫的全部內容,可以將**對象轉換為 JSON** 。 如果您有任何疑問或反饋,請發表評論。 學習愉快! 參考 [GSON 用戶指南](https://sites.google.com/site/gson/gson-user-guide "google gson")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看