Gson - Truyền trực tuyến
Streaming API được sử dụng để đọc mã thông báo JSON bằng mã thông báo. Nó đọc và ghi nội dung JSON dưới dạng các sự kiện rời rạc.JsonReader và JsonWriter đọc / ghi dữ liệu dưới dạng mã thông báo, được gọi là JsonToken.
Đây là cách tiếp cận mạnh mẽ nhất trong ba cách tiếp cận để xử lý JSON. Nó có chi phí thấp nhất và nó khá nhanh trong các hoạt động đọc / ghi. Nó tương tự như trình phân tích cú pháp Stax cho XML.
Trong chương này, chúng tôi sẽ giới thiệu cách sử dụng API phát trực tuyến GSON để đọc dữ liệu JSON. Streaming API hoạt động với khái niệm mã thông báo và mọi chi tiết của Json phải được xử lý cẩn thận.
//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();
}
Thí dụ
Hãy xem nào JsonReaderđang hoạt động. Tạo một tệp lớp Java có tênGsonTester trong C: \> GSON_WORKSPACE.
Tệp - 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() + " ");
}
}
}
}
Xác minh kết quả
Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\GSON_WORKSPACE>javac GsonTester.java
Bây giờ chạy GsonTester để xem kết quả -
C:\GSON_WORKSPACE>java GsonTester
Xác minh kết quả đầu ra.
Name: Mahesh Kumar
Age:21
Verified:false
Marks [ 100 90 85 ]