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