JavaのGsonライブラリでJSONオブジェクトをJavaオブジェクトに変換する方法
Gsonは、Googleが開発したJava向けのJSONライブラリです。Gsonを使用することで、JavaオブジェクトからJSONを生成したり、その逆にJSONをJavaオブジェクトへ変換したりすることができます。
JSONオブジェクトをJavaオブジェクトに変換(デシリアライズ)するには、GsonクラスのfromJson()メソッドを呼び出します。このメソッドは、JSON文字列とターゲットとなるクラスを引数に受け取り、対応するJavaオブジェクトを返します。
構文
public <T> fromJson(java.lang.String json, java.lang.Class<T> classOfT) throws JsonSyntaxException
第一引数には変換元のJSON文字列を、第二引数にはマッピング先のクラスのClassオブジェクトを指定します。JSONの形式が不正な場合はJsonSyntaxExceptionがスローされる点に注意してください。
使用例
以下の例では、JSON文字列「{'name':'raja','age':25}」をEmpクラスのオブジェクトに変換しています。
import com.google.gson.*;
public class JSONtoJavaObjTest {
public static void main(String[] args) {
Gson gson = new Gson();
Emp emp = gson.fromJson("{'name':'raja','age':25}", Emp.class);
System.out.println(emp.getName());
System.out.println(emp.getAge());
}
}
// Empクラス
class Emp {
String name;
int age;
public Emp() {
super();
}
public Emp(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
実行結果
raja 25
ポイント
- デシリアライズの対象となるクラス(この例ではEmpクラス)には、引数なしのコンストラクタが必要です。Gsonがリフレクションを使ってインスタンスを生成するためです。
- JSONのキー名(name、age)は、クラスのフィールド名と一致している必要があります。一致しない場合は@SerializedNameアノテーションでマッピングを定義できます。
- 依存関係を追加するには、Mavenであれば「com.google.code.gson:gson」をpom.xmlに記述します。
-
【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法
GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを
-
JavaオブジェクトをJSONに変換する方法(Jackson・Gsonの使い方)
このチュートリアルでは、JavaオブジェクトをJSON形式に変換する方法を、定番ライブラリであるJacksonとGsonの2つを使って解説します。 サンプルとして使用するのは、ごく標準的なPOJO(Plain Old Java Object)であるPersonクラスです。Personオブジェクトを作成したら、それぞれのライブラリを使ってJSONへ変換してみましょう。 Person.java import java.util.List; import java.util.Map; public class Person { String name; Integer age;