Since Gson version 1.6, two new classes JsonReader
and JsonWriter
are introduced to provide streaming processing on JSON data. Read this Gson streaming documentation to understand what are the benefits of using it.
JsonWriter
– Write JSON as a stream.JsonReader
– Read JSON as a stream.
1. JsonWriter
GsonExample1.java
package com.favtuts.json; import java.io.FileWriter; import java.io.IOException; import com.google.gson.stream.JsonWriter; public class GsonStreamingModelExamples { public static void main(String[] args) { writeJSONasStream(); } static void writeJSONasStream() { try (JsonWriter writer = new JsonWriter(new FileWriter("/home/tvt/workspace/favtuts//user.json"))) { writer.beginObject(); // { writer.name("name").value("favtuts"); // "name" : "favtuts" writer.name("age").value(29); // "age" : 29 writer.name("messages"); // "messages" : writer.beginArray(); // [ writer.value("msg 1"); // "msg 1" writer.value("msg 2"); // "msg 2" writer.value("msg 3"); // "msg 3" writer.endArray(); // ] writer.endObject(); // } } catch (IOException e) { e.printStackTrace(); } } }
Output
c:\\projects\\user.json
{"name":"favtuts","age":29,"messages":["msg 1","msg 2","msg 3"]}
2. JsonReader
Token
In streaming mode, every JSON data consider as an individual token. When you use JsonReader
to process it, each token will be processed sequentially. For example,
{
"url":"www.tuts.heomi.net"
}
- Token 1 = {
- Token 2 = url
- Token 3 = www.tuts.heomi.net
- Token 4 = }
GsonExample2.java
package com.favtuts.json; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import com.google.gson.stream.JsonReader; public class GsonStreamingModelExamples { public static void main(String[] args) { readJSONasStream(); } static void readJSONasStream() { try (JsonReader reader = new JsonReader(new FileReader("/home/tvt/workspace/favtuts/user.json"))) { reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("name")) { System.out.println(reader.nextString()); } else if (name.equals("age")) { System.out.println(reader.nextInt()); } else if (name.equals("messages")) { // read array reader.beginArray(); while (reader.hasNext()) { System.out.println(reader.nextString()); } reader.endArray(); } else { reader.skipValue(); // avoid some unhandle events } } reader.endObject(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Output
favtuts
29
msg 1
msg 2
msg 3
Note
Read more Gson examples
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-basic/json