JSONを読み書きするGsonストリーミング

Gson – JSONをストリームとして読み書きする

Gsonバージョン1.6以降、JSONデータのストリーミング処理を提供するために2つの新しいクラスJsonReaderJsonWriterが導入されました。 このGson streaming documentationを読んで、それを使用する利点を理解してください。

  • JsonWriter –JSONをストリームとして書き込みます。

  • JsonReader –JSONをストリームとして読み取ります。

1. JsonWriter

GsonExample1.java

package com.example;

import com.google.gson.stream.JsonWriter;

import java.io.FileWriter;
import java.io.IOException;

public class GsonExample1 {

    public static void main(String[] args) {

        try (JsonWriter writer = new JsonWriter(new FileWriter("c:\\projects\\user.json"))) {

            writer.beginObject();                   // {
            writer.name("name").value("example");    // "name" : "example"
            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();
        }

    }

}

出力

c:\projects\user.json

{"name":"example","age":29,"messages":["msg 1","msg 2","msg 3"]}

2. JsonReader

Token
ストリーミングモードでは、すべてのJSONデータは個別のトークンと見なされます。 JsonReaderを使用して処理すると、各トークンは順番に処理されます。 例えば、

{
    "url":"www.example.com"
}
  • トークン1 = \ {

  • トークン2 = URL

  • トークン3 = www.example.com

  • トークン4 =}

GsonExample2.java

package com.example;

import com.google.gson.stream.JsonReader;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class GsonExample2 {

    public static void main(String[] args) {

        try (JsonReader reader = new JsonReader(new FileReader("c:\\projects\\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();
        }

    }
}

出力

example
29
msg 1
msg 2
msg 3

Note
続きを読むGson examples