基本型→JSONの変換
前回は2回にわたってJavaプログラムでJSONデータを扱うための
Gsonはこのページよりダウンロードすることができます。
Gsonを使う場合に重要なのは,
まずは整数や文字列をJSON形式で出力してみましょう。次のようにGsonインスタンスを生成し,
// Gsonオブジェクトを作成
Gson gson = new Gson();
// 基本型,String,配列からJSONへの変換
System.out.println(gson.toJson(123)); // 「123」と出力
System.out.println(gson.toJson("hello")); // 「"hello"」と出力
int[] numbers = {1, 2, 3};
System.out.println(gson.toJson(numbers)); // 「[1,2,3]」と出力
toJson()メソッドでJSONデータを直接ファイルに出力することもできます。その場合,
// ファイルへの書き出し
try (JsonWriter writer =
new JsonWriter(new BufferedWriter(new FileWriter("output1.json")))) {
gson.toJson(new JsonPrimitive("hello"), writer);
} catch (IOException ex) {
ex.printStackTrace();
}
このコードを実行すると,
"hello"
JSON→基本型の変換
JSON形式のデータをJavaオブジェクトとして読み込むにはfromJson()メソッドを利用します。その場合,
// Gsonオブジェクトを作成
Gson gson = new Gson();
// JSONから基本型,Stringへの変換
int number = gson.fromJson("123", int.class);
System.out.println(number); // 「123」と出力
String text = gson.fromJson("\"hello\"", String.class);
System.out.println(text); // 「hello」と出力
int[] array = gson.fromJson("[1, 2, 3]", int[].class);
System.out.println(array); // 「[x@xxxx」(配列の文字列表現)と出力
ファイルから読み込む場合には,
// ファイルからの読み込み
try (JsonReader reader =
new JsonReader(new BufferedReader(new FileReader("output1.json")))) {
text = gson.fromJson(reader, String.class);
System.out.println(text); // 「hello」と出力
} catch (IOException ex) {
ex.printStackTrace();
}
Javaオブジェクト→JSONの変換
次に,
public class Name {
private String first;
private String last;
public Name(String first, String last) {
this.first = first;
this.last = last;
}
}
public class User {
private Name name;
private String mail;
public User(Name name, String mail) {
this.name = name;
this.mail = mail;
}
@Override
public String toString() {
return "name:\n " + name.getFirst() + "\n " + name.getLast() + "\nmail:\n " + mail;
}
}
この場合も,
// JSONファイルの書き出し
try (JsonWriter writer =
new JsonWriter(new BufferedWriter(new FileWriter("output2.json")))) {
// UserオブジェクトからJSONへの変換
Name name = new Name("技評", "太郎");
User user = new User(name, "taro@example.co.jp");
gson.toJson(user, User.class, writer);
} catch (IOException ex) {
ex.printStackTrace();
}
このコードを実行すると,
{"name":{"first":"技評","last":"太郎"},"mail":"taro@example.co.jp"}