Gson - Transmisión
La API de transmisión se utiliza para leer token JSON por token. Lee y escribe contenido JSON como eventos discretos.JsonReader y JsonWriter leer / escribir los datos como token, denominado JsonToken.
Es el enfoque más poderoso entre los tres enfoques para procesar JSON. Tiene la sobrecarga más baja y es bastante rápido en operaciones de lectura / escritura. Es análogo al analizador Stax para XML.
En este capítulo, mostraremos el uso de las API de transmisión GSON para leer datos JSON. La API de transmisión funciona con el concepto de token y todos los detalles de Json deben manejarse con 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();
}
Ejemplo
Veamos JsonReaderen acción. Cree un archivo de clase Java llamadoGsonTester en C: \> GSON_WORKSPACE.
Archivo - 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 el resultado
Compila las clases usando javac compilador de la siguiente manera:
C:\GSON_WORKSPACE>javac GsonTester.java
Ahora ejecuta el GsonTester para ver el resultado -
C:\GSON_WORKSPACE>java GsonTester
Verifique la salida.
Name: Mahesh Kumar
Age:21
Verified:false
Marks [ 100 90 85 ]