Gson - Streaming
A API de streaming é usada para ler token JSON por token. Ele lê e grava conteúdo JSON como eventos discretos.JsonReader e JsonWriter ler / escrever os dados como token, referido como JsonToken.
É a abordagem mais poderosa entre as três abordagens para processar JSON. Tem a menor sobrecarga e é bastante rápido em operações de leitura / gravação. É análogo ao analisador Stax para XML.
Neste capítulo, mostraremos o uso de APIs de streaming GSON para ler dados JSON. A API de streaming funciona com o conceito de token e todos os detalhes do Json devem ser tratados com cuidado.
//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();
}
Exemplo
Vamos ver JsonReaderem ação. Crie um arquivo de classe Java chamadoGsonTester em C: \> GSON_WORKSPACE.
Arquivo - 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() + " ");
}
}
}
}
Verifique o resultado
Compile as classes usando javac compilador da seguinte forma -
C:\GSON_WORKSPACE>javac GsonTester.java
Agora execute o GsonTester para ver o resultado -
C:\GSON_WORKSPACE>java GsonTester
Verifique a saída.
Name: Mahesh Kumar
Age:21
Verified:false
Marks [ 100 90 85 ]