<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Gson 教程 原文:http://zetcode.com/java/gson/ Gson 教程展示了如何使用 Gson 庫在 Java 中使用 JSON。 我們使用三種不同的 Gson API 來處理 JSON。 源代碼可在作者的 Github [倉庫](https://github.com/janbodnar/Java-Gson-Examples)中獲得。 JSON(JavaScript 對象表示法)是一種輕量級的數據交換格式。 人類很容易讀寫,機器也很容易解析和生成。 與 XML 相比,它不那么冗長且更具可讀性。 JSON 的官方互聯網媒體類型為`application/json`。 JSON 文件擴展名是`.json`。 JSON 可直接由 JavaScript 使用。 ## Java Gson 庫 Gson 是 Java 序列化/反序列化庫,用于將 Java 對象轉換為 JSON 并返回。 Gson 由 Google 創建,供內部使用,后來開源。 ## Java Gson Maven 依賴 ```java <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> ``` 這是對 Gson 的 Maven 依賴。 ## Java Gson 特性 這些是 Gson 特性: * 用于 Java 對象 JSON 序列化和反序列化的簡單工具。 * Java 泛型的廣泛支持。 * 對象的自定義表示。 * 支持任意復雜的對象。 * 快速,低內存占用。 * 允許緊湊的輸出和漂亮的打印。 ## Java Gson API Gson 具有三種 API: * 數據綁定 API * 樹模型 API * 流 API 數據綁定 API 使用屬性訪問器將 JSON 與 POJO 之間進行轉換。 Gson 使用數據類型適配器處理 JSON 數據。 它類似于 XML JAXB 解析器。 樹模型 API 創建 JSON 文檔的內存樹表示。 它構建`JsonElements`的樹。 它類似于 XML DOM 解析器。 流 API 是一種低級 API,它使用`JsonReader`和`JsonWriter`作為離散記號讀取和寫入 JSON 內容。 這些類將數據讀取為`JsonTokens`。 該 API 具有最低的開銷,并且在讀/寫操作中速度很快。 它類似于 XML 的 Stax 解析器。 ## Java `Gson`類 `Gson`是使用 Gson 庫的主要類。 有兩種創建`Gson`的基本方法: * `new Gson()` * `new GsonBuilder().create()` `GsonBuilder`可用于使用各種配置設置來構建`Gson`。 ## Java Gson `toJson()` `toJson()`方法將指定的對象序列化為其等效的 JSON 表示形式。 `GsonToJson.java` ```java package com.zetcode; import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; public class GsonToJson { public static void main(String[] args) { Map<Integer, String> colours = new HashMap<>(); colours.put(1, "blue"); colours.put(2, "yellow"); colours.put(3, "green"); Gson gson = new Gson(); String output = gson.toJson(colours); System.out.println(output); } } ``` 在示例中,我們使用`toJSon()`方法將映射序列化為 JSON。 ```java {"1":"blue","2":"yellow","3":"green"} ``` 這是示例的輸出。 ## Java Gson `fromJson()` `fromJson()`方法將指定的 JSON 反序列化為指定類的對象。 `GsonFromJson.java` ```java package com.zetcode; import com.google.gson.Gson; class User { private final String firstName; private final String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return new StringBuilder().append("User{").append("First name: ") .append(firstName).append(", Last name: ") .append(lastName).append("}").toString(); } } public class GsonFromJson { public static void main(String[] args) { String json_string = "{\"firstName\":\"Tom\", \"lastName\": \"Broody\"}"; Gson gson = new Gson(); User user = gson.fromJson(json_string, User.class); System.out.println(user); } } ``` 該示例使用`fromJson()`方法將 JSON 讀取到 Java 對象中。 ```java class User { private final String firstName; private final String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return new StringBuilder().append("User{").append("First name: ") .append(firstName).append(", Last name: ") .append(lastName).append("}").toString(); } } ``` 注意,沒有必要使用獲取器和設置器方法。 ```java User{First name: Tom, Last name: Broody} ``` This is the output of the example. ## `GsonBuilder` `GsonBuilder`使用各種配置設置構建`Gson`。 `GsonBuilder`遵循構建器模式,通常通過首先調用各種配置方法來設置所需的選項,最后調用`create()`來使用它。 `GsonBuilderEx.java` ```java package com.zetcode; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.io.IOException; import java.io.PrintStream; class User { private final String firstName; private final String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } } public class GsonBuilderEx { public static void main(String[] args) throws IOException { try (PrintStream prs = new PrintStream(System.out, true, "UTF8")) { Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) .create(); User user = new User("Peter", "Flemming"); gson.toJson(user, prs); } } } ``` 在示例中,我們將對象寫入 JSON。 我們使用`GsonBuilder`創建`Gson`。 ```java Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) .create(); ``` 我們使用`GsonBuilder`創建并配置`Gson`。 字段命名策略設置為`FieldNamingPolicy.UPPER_CAMEL_CASE`。 ```java {"FirstName":"Peter","LastName":"Flemming"} ``` 這是輸出。 ## Java Gson 漂亮打印 Gson 有兩種輸出模式:緊湊和漂亮。 `GsonPrettyPrinting.java` ```java package com.zetcode; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.HashMap; import java.util.Map; public class GsonPrettyPrinting { public static void main(String[] args) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); Map<String, Integer> items = new HashMap<>(); items.put("chair", 3); items.put("pencil", 1); items.put("book", 5); gson.toJson(items, System.out); } } ``` 該示例漂亮地顯示了 JSON 輸出。 ```java Gson gson = new GsonBuilder().setPrettyPrinting().create(); ``` `setPrettyPrinting()`方法設置漂亮的打印模式。 ```java { "chair": 3, "book": 5, "pencil": 1 } ``` This is the output of the example. ## 序列化空值 默認情況下,Gson 不會將具有空值的字段序列化為 JSON。 如果 Java 對象中的字段為`null`,則 Gson 會將其排除。 我們可以使用`serializeNulls()`方法強制 Gson 通過`GsonBuilder`序列化`null`值。 `GsonSerializeNulls.java` ```java package com.zetcode; import com.google.gson.Gson; import com.google.gson.GsonBuilder; class User { private String firstName; private String lastName; public User() {}; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Override public String toString() { return new StringBuilder().append("User{").append("First name: ") .append(firstName).append(", Last name: ") .append(lastName).append("}").toString(); } } public class GsonSerializeNulls { public static void main(String[] args) { GsonBuilder builder = new GsonBuilder(); builder.serializeNulls(); Gson gson = builder.create(); User user = new User(); user.setFirstName("Norman"); String json = gson.toJson(user); System.out.println(json); } } ``` 該示例顯示了如何序列化`null`值。 ```java {"firstName":"Norman","lastName":null} ``` 這是輸出。 ## Java Gson 寫入列表 以下示例將 JSON 對象列表寫入文件。 `GsonWriteList.java` ```java package com.zetcode; import com.google.gson.Gson; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; class Item { private final String name; private final int quantity; public Item(String name, int quantity) { this.name = name; this.quantity = quantity; } } public class GsonWriteList { public static void main(String[] args) throws IOException { String fileName = "src/main/resources/items.json"; try (FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter isr = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { Gson gson = new Gson(); Item item1 = new Item("chair", 4); Item item2 = new Item("book", 5); Item item3 = new Item("pencil", 1); List<Item> items = new ArrayList<>(); items.add(item1); items.add(item2); items.add(item3); gson.toJson(items, isr); } System.out.println("Items written to file"); } } ``` 該示例將 JSON 數據寫入`items.json`文件。 ## Java Gson 讀入數組 下一個示例將數據讀取到 Java 數組中。 ```java $ cat users.json [{"firstName":"Peter","lastName":"Flemming"}, {"firstName":"Nicole","lastName":"White"}, {"firstName":"Robin","lastName":"Bullock"} ] ``` 這些是`users.json`文件的內容。 `GsonReadArray.java` ```java package com.zetcode; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.io.File; import java.io.IOException; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; class User { private final String firstName; private final String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return new StringBuilder().append("{User").append("First name: ") .append(firstName).append(", Last name: ") .append(lastName).append("}").toString(); } } public class GsonReadArray { public static void main(String[] args) throws IOException { Gson gson = new GsonBuilder().create(); String fileName = "src/main/resources/users.json"; Path path = new File(fileName).toPath(); try (Reader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { User[] users = gson.fromJson(reader, User[].class); Arrays.stream(users).forEach( e -> { System.out.println(e); }); } } } ``` 該示例將`items.json`文件中的數據讀取到數組中。 我們將數組的內容打印到控制臺。 ```java User[] users = gson.fromJson(reader, User[].class); ``` `fromJson()`的第二個參數是數組類。 ## Java Gson 從 URL 讀取 JSON 以下示例從網頁讀取 JSON 數據。 我們從`http://time.jsontest.com`獲得 JSON 數據。 ```java { "time": "02:44:19 PM", "milliseconds_since_epoch": 1496155459478, "date": "05-30-2017" } ``` GET 請求返回此 JSON 字符串。 `GsonReadWebPage.java` ```java package com.zetcode; import com.google.gson.Gson; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import java.nio.charset.StandardCharsets; class TimeData { private String time; private Long milliseconds_since_epoch; private String date; @Override public String toString() { return "TimeData{" + "time=" + time + ", milliseconds_since_epoch=" + milliseconds_since_epoch + ", date=" + date + '}'; } } public class GsonReadWebPage { public static void main(String[] args) throws IOException { String webPage = "http://time.jsontest.com"; try (InputStream is = new URL(webPage).openStream(); Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { Gson gson = new Gson(); TimeData td = gson.fromJson(reader, TimeData.class); System.out.println(td); } } } ``` 該代碼示例從`http://time.jsontest.com`讀取 JSON 數據。 ```java TimeData{time=11:23:09 PM, milliseconds_since_epoch=1516317789302, date=01-18-2018} ``` 這是輸出。 ## Java Gson 使用`@Expose`排除字段 `@Expose`注解指示應公開成員以進行 JSON 序列化或反序列化。 `@Expose`注解可以采用兩個布爾參數:`serialize`和`deserialize`。 必須使用`excludeFieldsWithoutExposeAnnotation()`方法顯式啟用`@Expose`注解。 `GsonExcludeFields.java` ```java package com.zetcode; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.Expose; enum MaritalStatus { SINGLE, MARRIED, DIVORCED, UNKNOWN } class Person { @Expose private String firstName; @Expose private String lastName; private MaritalStatus maritalStatus; public Person(String firstName, String lastName, MaritalStatus maritalStatus) { this.firstName = firstName; this.lastName = lastName; this.maritalStatus = maritalStatus; } public Person() {} } public class GsonExcludeFields { public static void main(String[] args) { Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .setPrettyPrinting() .create(); Person p = new Person("Jack", "Sparrow", MaritalStatus.UNKNOWN); gson.toJson(p, System.out); } } ``` 在示例中,我們從序列化中排除一個字段。 ```java @Expose private String firstName; @Expose private String lastName; private MaritalStatus maritalStatus; ``` 婚姻狀況字段不會被序列化,因為它沒有用`@Expose`注解修飾。 ```java Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .setPrettyPrinting() .create(); ``` `@Expose`注解通過`excludeFieldsWithoutExposeAnnotation()`方法啟用了字段排除。 ```java { "firstName": "Jack", "lastName": "Sparrow" } ``` 這是輸出。 ## Java Gson 數據綁定 API 數據綁定 API 使用屬性訪問器在 POJO 與 JSON 之間進行轉換。 Gson 使用數據類型適配器處理 JSON 數據。 ### Gson 數據綁定 API 編寫 在下面的示例中,我們使用數據綁定 API 編寫數據。 `GsonDataBindApiWrite.java` ```java package com.zetcode; import com.google.gson.Gson; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; class Car { private final String name; private final String model; private final int price; private final String[] colours; public Car(String name, String model, int price, String[] colours) { this.name = name; this.model = model; this.price = price; this.colours = colours; } } public class GsonDataBindApiWrite { public static void main(String[] args) throws FileNotFoundException, IOException { List<Car> cars = new ArrayList<>(); cars.add(new Car("Audi", "2012", 22000, new String[]{"gray", "red", "white"})); cars.add(new Car("Skoda", "2016", 14000, new String[]{"black", "gray", "white"})); cars.add(new Car("Volvo", "2010", 19500, new String[]{"black", "silver", "beige"})); String fileName = "src/main/resources/cars.json"; Path path = Paths.get(fileName); try (Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { Gson gson = new Gson(); gson.toJson(cars, writer); } System.out.println("Cars written to file"); } } ``` 在示例中,我們創建了一個汽車對象列表,并使用 Gson 數據綁定 API 對其進行了序列化。 ```java Gson gson = new Gson(); gson.toJson(cars, writer); ``` 我們將`cars`列表傳遞給`toJson()`方法。 Gson 自動將汽車對象映射到 JSON。 ### 讀取 Gson 數據綁定 API 在下面的示例中,我們使用數據綁定 API 讀取數據。 `GsonDataBindingApiRead.java` ```java package com.zetcode; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.List; class Car { private final String name; private final String model; private final int price; private final String[] colours; public Car(String name, String model, int price, String[] colours) { this.name = name; this.model = model; this.price = price; this.colours = colours; } @Override public String toString() { return "Car{" + "name=" + name + ", model=" + model + ", price=" + price + ", colours=" + Arrays.toString(colours) + '}'; } } public class GsonDataBindingApiRead { public static void main(String[] args) throws FileNotFoundException, IOException { String fileName = "src/main/resources/cars.json"; Path path = Paths.get(fileName); try (Reader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { Gson gson = new Gson(); List<Car> cars = gson.fromJson(reader, new TypeToken<List<Car>>(){}.getType()); cars.forEach(System.out::println); } } } ``` 在示例中,我們使用 Gson 數據綁定 API 將數據從 JSON 文件讀取到汽車對象列表中。 ```java List<Car> cars = gson.fromJson(reader, new TypeToken<List<Car>>(){}.getType()); ``` Gson 自動將 JSON 映射到`Car`對象。 由于類型信息在運行時會丟失,因此我們需要使用`TypeToken`讓 Gson 知道我們使用的是哪種類型。 ## Java Gson 樹模型 API 樹模型 API 在內存中創建 JSON 文檔的樹表示。 它構建`JsonElements`的樹。 `JsonElement`是代表 Json 元素的類。 它可以是`JsonObject`,`JsonArray`,`JsonPrimitive`或`JsonNull`。 ### Gson 樹模型寫 在以下示例中,我們使用 Gson 樹模型 API 將 Java 對象寫入 JSON。 `GsonTreeModelWrite.java` ```java package com.zetcode; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; class Car { private final String name; private final String model; private final int price; private final String[] colours; public Car(String name, String model, int price, String[] colours) { this.name = name; this.model = model; this.price = price; this.colours = colours; } } public class GsonTreeModelWrite { public static void main(String[] args) throws FileNotFoundException, IOException { List<Car> cars = new ArrayList<>(); cars.add(new Car("Audi", "2012", 22000, new String[]{"gray", "red", "white"})); cars.add(new Car("Skoda", "2016", 14000, new String[]{"black", "gray", "white"})); cars.add(new Car("Volvo", "2010", 19500, new String[]{"black", "silver", "beige"})); String fileName = "src/main/resources/cars.json"; Path path = Paths.get(fileName); try (Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { Gson gson = new Gson(); JsonElement tree = gson.toJsonTree(cars); gson.toJson(tree, writer); } System.out.println("Cars written to file"); } } ``` 汽車對象列表被序列化為 JSON 格式。 ```java JsonElement tree = gson.toJsonTree(cars); ``` `toJsonTree`方法將指定的對象序列化為其等效表示形式,作為`JsonElements`的樹。 ```java JsonArray jarray = tree.getAsJsonArray(); ``` 我們使用`getAsJsonArray()`方法將樹轉換為`JsonArray`。 ```java JsonElement jel = jarray.get(1); ``` 我們從數組中獲取第二個元素。 ```java JsonObject object = jel.getAsJsonObject(); object.addProperty("model", "2009"); ``` 我們修改一個屬性。 ```java gson.toJson(tree, writer); ``` 最后,我們將樹對象寫入文件中。 ### Gson 樹模型讀取 在以下示例中,我們使用 Gson 樹模型 API 從 JSON 讀取 Java 對象。 `cars.json` ```java [{"name":"Audi","model":"2012","price":22000,"colours":["gray","red","white"]}, {"name":"Skoda","model":"2009","price":14000,"colours":["black","gray","white"]}, {"name":"Volvo","model":"2010","price":19500,"colours":["black","silver","beige"]}] ``` 這是`cars.json`文件中的 JSON 數據。 `GsonTreeModelRead.java` ```java package com.zetcode; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class GsonTreeModelRead { public static void main(String[] args) throws FileNotFoundException, IOException { String fileName = "src/main/resources/cars.json"; Path path = Paths.get(fileName); try (Reader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { JsonParser parser = new JsonParser(); JsonElement tree = parser.parse(reader); JsonArray array = tree.getAsJsonArray(); for (JsonElement element : array) { if (element.isJsonObject()) { JsonObject car = element.getAsJsonObject(); System.out.println("********************"); System.out.println(car.get("name").getAsString()); System.out.println(car.get("model").getAsString()); System.out.println(car.get("price").getAsInt()); JsonArray cols = car.getAsJsonArray("colors"); cols.forEach(col -> { System.out.println(col); }); } } } } } ``` 在示例中,我們將 JSON 數據從文件讀取到`JsonElements`樹中。 ```java JsonParser parser = new JsonParser(); JsonElement tree = parser.parse(reader); ``` `JsonParser`將 JSON 解析為`JsonElements`的樹結構。 ```java JsonArray array = tree.getAsJsonArray(); ``` 我們將樹作為`JsonArray`。 ```java for (JsonElement element : array) { if (element.isJsonObject()) { JsonObject car = element.getAsJsonObject(); System.out.println("********************"); System.out.println(car.get("name").getAsString()); System.out.println(car.get("model").getAsString()); System.out.println(car.get("price").getAsInt()); JsonArray cols = car.getAsJsonArray("colors"); cols.forEach(col -> { System.out.println(col); }); } } ``` 我們瀏覽`JsonArray`并打印其元素的內容。 ## Java Gson 流 API Gson 流 API 是一個低級 API,它以離散記號(`JsonTokens`)的形式讀取和寫入 JSON。 主要類別是`JsonReader`和`JsonWriter`。 `JsonToken`是 JSON 編碼的字符串中的結構,名稱或值類型。 這些是`JsonToken`類型: * `BEGIN_ARRAY` — 打開 JSON 數組 * `END_ARRAY` — 關閉 JSON 數組 * `BEGIN_OBJECT` — 打開 JSON 對象 * `END_OBJECT` — 關閉 JSON 對象 * `NAME` - JSON 屬性名稱 * `STRING` — JSON 字符串 * `NUMBER` — JSON 數字(雙精度,長整型或整型) * `BOOLEAN` — JSON 布爾值 * `NULL` — JSON 空值 * `END_DOCUMENT` — JSON 流的末尾。 ### `JsonWriter` `JsonWriter`將 JSON 編碼值寫入流,一次寫入一個記號。 流包含字面值(字符串,數字,布爾值和`null`)以及對象和數組的開始和結束定界符。 每個 JSON 文檔必須包含一個頂級數組或對象。 使用`beginObject()`和`endObject()`方法調用創建對象。 在對象內,標記在名稱及其值之間交替。 在`beginArray()`和`endArray()`方法調用中創建數組。 `GsonStreamApiWrite.java` ```java package com.zetcode; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class GsonStreamApiWrite { public static void main(String[] args) throws IOException { String fileName = "src/main/resources/cars.json"; Path path = Paths.get(fileName); try (JsonWriter writer = new JsonWriter(Files.newBufferedWriter(path, StandardCharsets.UTF_8))) { writer.beginObject(); writer.name("name").value("Audi"); writer.name("model").value("2012"); writer.name("price").value(22000); writer.name("colours"); writer.beginArray(); writer.value("gray"); writer.value("red"); writer.value("white"); writer.endArray(); writer.endObject(); } System.out.println("Data written to file"); } } ``` 在示例中,我們將一個汽車對象寫入 JSON 文件。 ```java try (JsonWriter writer = new JsonWriter(Files.newBufferedWriter(path, StandardCharsets.UTF_8))) { ``` 創建一個新的`JsonWriter`。 ```java writer.beginObject(); ... writer.endObject(); ``` 如上所述,每個 JSON 文檔必須具有一個頂級數組或對象。 在我們的例子中,我們有一個頂級對象。 ```java writer.name("name").value("Audi"); writer.name("model").value("2012"); writer.name("price").value(22000); ``` 我們將鍵值對寫入文檔。 ```java writer.name("colours"); writer.beginArray(); writer.value("gray"); writer.value("red"); writer.value("white"); writer.endArray(); ``` 在這里,我們創建一個數組。 ### `JsonReader` `JsonReader`讀取 JSON 編碼值作為記號流。 `GsonStreamApiRead.java` ```java package com.zetcode; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import java.io.IOException; import java.io.StringReader; public class GsonStreamApiRead { public static void main(String[] args) throws IOException { String json_string = "{\"name\":\"chair\",\"quantity\":3}"; try (JsonReader reader = new JsonReader(new StringReader(json_string))) { while (reader.hasNext()) { JsonToken nextToken = reader.peek(); if (JsonToken.BEGIN_OBJECT.equals(nextToken)) { reader.beginObject(); } else if (JsonToken.NAME.equals(nextToken)) { reader.nextName(); } else if (JsonToken.STRING.equals(nextToken)) { String value = reader.nextString(); System.out.format("%s: ", value); } else if (JsonToken.NUMBER.equals(nextToken)) { long value = reader.nextLong(); System.out.println(value); } } } } } ``` 該示例使用`JsonReader`從 JSON 字符串讀取數據。 ```java JsonReader reader = new JsonReader(new StringReader(json_string)); ``` `JsonReader`對象已創建。 它從 JSON 字符串讀取。 ```java while (reader.hasNext()) { ``` 在`while`循環中,我們迭代流中的記號。 ```java JsonToken nextToken = reader.peek(); ``` 我們使用`peek()`方法獲得下一個標記的類型。 ```java reader.beginObject(); ``` `beginObject()`方法使用 JSON 流中的下一個記號,并斷言它是新對象的開始。 ```java reader.nextName(); ``` `nextName()`方法返回下一個`JsonToken`并使用它。 ```java String value = reader.nextString(); System.out.format("%s: ", value); ``` 我們獲取下一個字符串值并將其打印到控制臺。 在本教程中,我們展示了如何通過 Gson 庫使用 JSON。 您可能也對相關教程感興趣: [Jsoup 教程](/java/jsoup/), [Java JSON 處理教程](/java/jsonp/), [Java8 `forEach`教程](/articles/java8foreach/),[用 Java 讀取文本文件](/articles/javareadtext/)和 [Java 教程](/lang/java/)。
                  <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>

                              哎呀哎呀视频在线观看