- 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 ]
广告