- Gson 教程
- Gson - 主頁
- Gson - 概覽
- Gson - 環境設定
- Gson - 第一個應用程式
- Gson - 類
- Gson - 物件序列化
- Gson - 資料繫結
- Gson - 物件資料繫結
- Gson - 樹形模型
- Gson - 流式處理
- Gson - 序列化示例
- Gson - 序列化內部類
- Gson - 自定義型別介面卡
- Gson - 空物件支援
- Gson - 版本控制支援
- JSON 序列化時排除欄位
- Gson 實用資源
- Gson - 快速指南
- Gson - 實用資源
- Gson - 討論
Gson - 流式處理
流式處理 API 用於逐個讀取 JSON 令牌。它將 JSON 內容作為離散事件進行讀取和寫入。**JsonReader** 和 **JsonWriter** 以令牌的形式讀取/寫入資料,稱為 **JsonToken**。
在三種處理 JSON 的方法中,這是最強大的方法。它的開銷最低,並且在讀取/寫入操作中非常快。它類似於 XML 的 Stax 解析器。
在本章中,我們將展示如何使用 GSON 流式處理 API 來讀取 JSON 資料。流式處理 API 遵循令牌的概念,必須謹慎處理 Json 的每個細節。
//create JsonReader object and pass it the json source or json text.
JsonReader reader = new JsonReader(new StringReader(jsonString));
//start reading json
reader.beginObject();
//get the next token
JsonToken token = reader.peek();
//check the type of the token
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
示例
讓我們看看 **JsonReader** 的作用。在 C:\>GSON_WORKSPACE 建立一個名為 **GsonTester** 的 Java 類檔案。
檔案 - GsonTester.java
import java.io.IOException;
import java.io.StringReader;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
public class GsonTester {
public static void main(String args[]) {
String jsonString =
"{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
JsonReader reader = new JsonReader(new StringReader(jsonString));
try {
handleJsonObject(reader);
}
catch (IOException e) {
e.printStackTrace();
}
}
private static void handleJsonObject(JsonReader reader) throws IOException {
reader.beginObject();
String fieldname = null;
while (reader.hasNext()) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.BEGIN_ARRAY)) {
System.out.print("Marks [ ");
handleJsonArray(reader);
System.out.print("]");
} else if (token.equals(JsonToken.END_OBJECT)) {
reader.endObject();
return;
} else {
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
if ("name".equals(fieldname)) {
//move to next token
token = reader.peek();
System.out.println("Name: "+reader.nextString());
}
if("age".equals(fieldname)) {
//move to next token
token = reader.peek();
System.out.println("Age:" + reader.nextInt());
}
if("verified".equals(fieldname)) {
//move to next token
token = reader.peek();
System.out.println("Verified:" + reader.nextBoolean());
}
}
}
}
private static void handleJsonArray(JsonReader reader) throws IOException {
reader.beginArray();
String fieldname = null;
while (true) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.END_ARRAY)) {
reader.endArray();
break;
} else if (token.equals(JsonToken.BEGIN_OBJECT)) {
handleJsonObject(reader);
} else if (token.equals(JsonToken.END_OBJECT)) {
reader.endObject();
} else {
System.out.print(reader.nextInt() + " ");
}
}
}
}
驗證結果
使用 **javac** 編譯器按如下方式編譯類 −
C:\GSON_WORKSPACE>javac GsonTester.java
現在,執行 **GsonTester** 以檢視結果 −
C:\GSON_WORKSPACE>java GsonTester
驗證輸出。
Name: Mahesh Kumar Age:21 Verified:false Marks [ 100 90 85 ]
廣告