Gson - Streaming
L'API di streaming viene utilizzata per leggere il token JSON per token. Legge e scrive contenuto JSON come eventi discreti.JsonReader e JsonWriter leggere / scrivere i dati come token, denominato JsonToken.
È l'approccio più potente tra i tre approcci per elaborare JSON. Ha l'overhead più basso ed è abbastanza veloce nelle operazioni di lettura / scrittura. È analogo al parser Stax per XML.
In questo capitolo, mostreremo l'utilizzo delle API di streaming GSON per leggere i dati JSON. L'API di streaming funziona con il concetto di token e ogni dettaglio di Json deve essere gestito con attenzione.
//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();
}
Esempio
Vediamo JsonReaderin azione. Crea un file di classe Java denominatoGsonTester in C: \> GSON_WORKSPACE.
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() + " ");
}
}
}
}
Verifica il risultato
Compila le classi usando javac compilatore come segue -
C:\GSON_WORKSPACE>javac GsonTester.java
Ora esegui il file GsonTester per vedere il risultato -
C:\GSON_WORKSPACE>java GsonTester
Verifica l'output.
Name: Mahesh Kumar
Age:21
Verified:false
Marks [ 100 90 85 ]