Gson – JSONをストリームとして読み書きする
Gsonバージョン1.6以降、JSONデータのストリーミング処理を提供するために2つの新しいクラスJsonReaderとJsonWriterが導入されました。 この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