Gson - 流媒体
Streaming API 用于逐个读取 JSON 令牌。 它将 JSON 内容作为离散事件读取和写入。 JsonReader和JsonWriter以token的形式读写数据,简称JsonToken。
它是三种处理 JSON 的方法中最强大的方法。 它的开销最低,并且读/写操作速度相当快。 它类似于 XML 的 Stax 解析器。
在本章中,我们将展示如何使用 GSON 流 API 来读取 JSON 数据。 Streaming API使用token的概念,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 类文件。
File - 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 ]

