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

References

Leave a Reply

Your email address will not be published. Required fields are marked *