Gson

バージョン1.6以来、JSONデータのストリーミング処理を提供するために、

JsonReader`と

JsonWriter`の2つの新しいクラスが導入されています。このhttp://sites.google.com/site/gson/streaming[Gsonストリーミングドキュメント]を読んで、その使用のメリットを理解してください。

ここでは、以下のGsonストリーミングAPIを使用してJSONデータを読み書きする2つの完全な例を示します。


  1. JsonWriter

    – JSONへのストリーミング書き込み.


  2. JsonReader

    – JSONからストリーミングを読み込みます.

Gsonのストリーミング処理は高速ですが、コード化するのが難しいのは、JSONデータの処理の細部まですべて処理する必要があるためです。

1. JsonWriter

この例では、 “JsonWriter”を使用してJSONデータをファイル名 ”

file.json

“に書き出します。 self-expalantoryのコメントを見る

import java.io.FileWriter;
import java.io.IOException;
import com.google.gson.stream.JsonWriter;

public class GsonStreamExample {
   public static void main(String[]args) {

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

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

    System.out.println("Done");

     } catch (IOException e) {
    e.printStackTrace();
     }

   }

}

結果として、 ”

file.json

“という名前の新しいファイルが作成されます:

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

2. JsonReader

例 “” JsonReader` “を使って” file.json “というファイルを解析するか読み上げます。

`JsonReader`を使って処理すると、各トークンは順次処理されます。

例えば、

{
    "url":"www.mkyong.com"
}

トークン1 = “\ {“トークン2 = “url”トークン3 = “www.mkyong.com”トークン4 = “}”

結果として、あなたは次のトークンに手動で移動するために ”

next





“メソッドを呼び出す必要があります。

完全な例を参照してください。

package com.mkyong.core;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.stream.JsonReader;

public class GsonStreamExample {
   public static void main(String[]args) {

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

       //read array
        reader.beginArray();

        while (reader.hasNext()) {
            System.out.println(reader.nextString());
        }

        reader.endArray();

      } else {
        reader.skipValue();//avoid some unhandle events
      }
        }

    reader.endObject();
    reader.close();

     } catch (FileNotFoundException e) {
    e.printStackTrace();
     } catch (IOException e) {
    e.printStackTrace();
     }

   }

}


出力

mkyong
29
msg 1
msg 2
msg 3

参考文献

ドキュメンテーション]。リンク://java/jackson-streaming-api-read-and-write-json/[Jackson

ストリーミング例]