JSONを読み書きするGsonストリーミング
Gson
バージョン1.6以来、JSONデータのストリーミング処理を提供するために、
JsonReader`と
JsonWriter`の2つの新しいクラスが導入されています。このhttp://sites.google.com/site/gson/streaming[Gsonストリーミングドキュメント]を読んで、その使用のメリットを理解してください。
ここでは、以下のGsonストリーミングAPIを使用してJSONデータを読み書きする2つの完全な例を示します。
-
JsonWriter
– JSONへのストリーミング書き込み. -
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