Gson-数据流API
1 什么是StreamingAPI
StreamingAPI用于通过令牌读取JSON令牌。它读取和写入JSON内容作为离散事件。JsonReader和JsonWriter作为令牌读取/写入数据,称为JsonToken。
它是处理JSON的三种方法中最强大的方法。它具有最低的开销,并且在读/写操作中相当快。它类似于Stax XML解析器。
2 StreamingAPI的语法
//创建JsonReader对象JsonReader reader = new JsonReader(new StringReader(jsonString));
//开始读取json数据
reader.beginObject();
//获取下一个令牌
JsonToken token = reader.peek();
//检查令牌类型
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
3 StreamingAPI的示例
3.1 编写核心类
MainApp:
package com.yiidian.gson;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import java.io.IOException;
import java.io.StringReader;
/**
* 一点教程网 - http://www.yiidian.com
*/
public class MainApp {
public static void main(String args[]) {
String jsonString =
"{\"name\":\"eric\", \"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() + " ");
}
}
}
}
3.2 运行测试
热门文章
优秀文章