JavaのGsonストリーミングAPIでファイルを読み書きする方法を解説
GsonのストリーミングAPIを使用すると、ファイルへの読み書きが可能になります。このAPIはシーケンシャル(逐次)読み書きの標準に基づいて設計されており、メモリに全体を読み込まずに処理できるため、大きなJSONデータを扱う際にも効率的です。
ストリーミングAPIの中核となるのは、JsonWriterとJsonReaderという2つのクラスです。JsonWriterは、JSONエンコードされた値をストリームへ1トークンずつ書き込みます。ストリームには、文字列・数値・ブール値・nullといったリテラル値に加え、オブジェクトや配列の開始・終了デリミタも含まれます。一方、JsonReaderは、JSONエンコードされた値をトークンのストリームとして読み取ります。トークンはJSONドキュメント内の出現順序、すなわち深さ優先順(depth-first order)で走査されます。
JsonWriterを使ってファイルに書き込む
以下の例では、JsonWriterを使用して「input.json」ファイルにオブジェクトと配列を含むJSONデータを書き込んでいます。beginObject()でオブジェクトの開始、name().value()でキーと値のペア、beginArray()/endArray()で配列を定義します。
コード例
import java.io.*;
import com.google.gson.stream.*;
public class JsonWriterTest {
public static void main(String args[]) {
JsonWriter writer;
try {
writer = new JsonWriter(new FileWriter("input.json"));
writer.beginObject();
writer.name("name").value("Adithya");
writer.name("age").value(25);
writer.name("technologies");
writer.beginArray();
writer.value("Java");
writer.value("Scala");
writer.value("Python");
writer.endArray();
writer.endObject();
writer.close();
System.out.println("Data write to a file successfully");
} catch(Exception e) {
e.printStackTrace();
}
}
}出力結果
Data write to a file successfully
このプログラムを実行すると、「input.json」には次のようなJSONデータが出力されます。
{"name":"Adithya","age":25,"technologies":["Java","Scala","Python"]}JsonReaderを使ってファイルを読み込む
次に、JsonReaderを使用して先ほど作成したJSONファイルを読み込みます。hasNext()でトークンの有無を確認しながらループ処理を行い、nextName()でキー名を取得して、値の種類に応じたnextString()やnextInt()などで値を読み取ります。未知のキーに対してはskipValue()でスキップできる点もポイントです。
コード例
import java.io.*;
import com.google.gson.stream.*;
public class JsonReaderTest {
public static void main(String args[]) {
JsonReader reader;
try {
reader = new JsonReader(new FileReader("input.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("technologies")) {
reader.beginArray();
while(reader.hasNext()) {
System.out.println(reader.nextString());
}
reader.endArray();
} else {
reader.skipValue();
}
}
reader.endObject();
reader.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}出力結果
Adithya 25 Java Scala Python
このように、GsonのストリーミングAPIを活用することで、JSONデータをトークン単位で逐次的に処理でき、メモリ使用量を抑えながら高速な読み書きを実現できます。特に大規模なJSONファイルを扱う場合には、DOMベースのモデルよりもストリーミングAPIの方が適しています。
-
【Java】JSONオブジェクトをファイルに書き込む方法(json-simpleライブラリの使い方)
JSON(JavaScript Object Notation)は、現在もっとも広く使われているデータ交換フォーマットのひとつです。軽量であることと、特定のプログラミング言語に依存しないことが大きな特徴で、異なるシステム間でのデータやり取りに最適です。 JavaでJSONファイルを読み書きするには、json-simple ライブラリが便利です。json-simpleは軽量なJSON処理ライブラリで、JSONテキストのエンコード(書き込み)とデコード(読み込み)の両方に対応しており、JSON仕様(RFC4627)に完全準拠しています。 ライブラリの準備 json-simpleを使用するには、まず
-
JavaでJSONファイルを作成する方法をわかりやすく解説
JSON(JavaScript Object Notation)は、人間が読みやすい形式でデータを交換するために設計された、軽量なテキストベースのオープン標準フォーマットです。JSONの記法は、C、C++、Java、Python、Perlなど、多くのプログラミング言語に精通したプログラマーにとって馴染み深いものとなっています。 JSONドキュメントのサンプル 以下は、書籍情報を格納した典型的なJSONドキュメントの例です。 { book: [ { id: 01, language: Java, ed