JavaでGsonを使って重複キーなしのJSONを解析する方法
Gsonは、Googleが開発したJava向けのJSONライブラリです。Gsonを利用することで、JSONの生成や、JSONからJavaオブジェクトへの変換を簡単に行うことができます。Gsonインスタンスを作成するには、GsonBuilderクラスのインスタンスを生成し、create()メソッドを呼び出します。
重複キーを持たないJSONを解析する場合は、TypeTokenクラスを使用します。Map型の型リテラル(Type Literal)を作成したいときは、空の匿名内部クラス(匿名サブクラス)を定義するのが一般的な手法です。Mapではキーの重複が許されないため、もしJSONに同じキーが含まれていた場合、解析時に以下のような実行時エラーが発生します。
Exception in thread "main" com.google.gson.JsonSyntaxException: duplicate key
TypeTokenクラスの構文
public class TypeToken<T> extends Object
TypeTokenはジェネリック型の情報を実行時に保持するためのクラスで、getType()メソッドを呼び出すことで、対応するJavaのTypeオブジェクトを取得できます。これにより、Map<Integer, String>のような複雑なジェネリック型も正しく指定できるようになります。
コード例
以下は、GsonとTypeTokenを使って、キーがInteger型・値がString型のMapとしてJSONを解析するサンプルコードです。
import java.lang.reflect.Type;
import java.util.Map;
import com.google.gson.*;
import com.google.gson.reflect.TypeToken;
public class JsonWithoutDuplicateKeysTest {
public static void main(String args[]) throws Exception {
String json = "{\"123\":\"abc\", \"124\":\"def\", \"125\":\"ghi\"}";
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Type mapType = new TypeToken<Map<Integer, String>>() {}.getType();
Map<String, String> map = gson.fromJson(json, mapType);
System.out.println(map);
}
}
実行結果
{123=abc, 124=def, 125=ghi}
ポイントまとめ
- GsonBuilder#create()でGsonインスタンスを生成する。
- ジェネリック型(Mapなど)を指定する際は、TypeTokenの匿名サブクラスを作成して
getType()で型情報を取得する。 - JSON内に重複キーが存在すると、JsonSyntaxException: duplicate keyがスローされるため、事前にデータの検証を行っておくと安全です。
-
【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法
GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを
-
JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説
このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。 JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。 データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。 まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納さ