Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのMapをJSONに変換する3つの方法(Jackson・Gson・org.json)

JavaのMap(マップ)をJSONに変換する方法はいくつかあります。Javaでは、配列やMapとJSONの相互変換を行う場面が非常に多く、Web APIとのデータ連携などでも欠かせない処理です。

この記事では、代表的なライブラリであるJacksonGsonorg.jsonを使用して、JavaのMapをJSONに変換する3つの具体例をサンプルコード付きで解説します。

Jacksonを使ってJavaのMapをJSONに変換する

最初の例では、Jackson Core と Jackson Databind を使ってJavaのMapをJSONに変換します。

Jacksonライブラリを使用するには、まず pom.xml に以下の依存関係を追加します。

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-core</artifactId>
        <version>2.9.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
</dependencies>

続いて、変換処理のコード例です。ObjectMapper クラスの writeValueAsString() メソッドを使うことで、MapオブジェクトをJSON文字列に変換できます。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

public class ConvertJavaMapToJson {

    @Test
    public void convertMapToJson() {
        Map<String, String> elements = new HashMap();
        elements.put("Key1", "Value1");
        elements.put("Key2", "Value2");
        elements.put("Key3", "Value3");

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            String json = objectMapper.writeValueAsString(elements);
            System.out.println(json);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

実行結果:

{"Key2":"Value2","Key1":"Value1","Key3":"Value3"}

出力結果を見るとわかるように、JSON内の要素の順序は、Mapに追加した順序とは一致していません。これは HashMap が要素の順序を保証しないためです。

要素の順序を保持したい場合は、代わりに SortedMap(実装クラスとして TreeMap)を使用します。

例:

SortedMap<String, String> elements = new TreeMap();

実行結果(キー順にソートされます):

{"Key1":"Value1","Key2":"Value2","Key3":"Value3"}
  • JavaでJSONをパースする方法
  • JSONのエンコードとデコードの方法
  • JavaオブジェクトをJSONに変換する方法

Gsonを使ってJavaのMapをJSONに変換する

次の例では、Googleが提供するGsonライブラリを使用してJavaのMapをJSONに変換します。まず、Gsonを依存関係として pom.xml に追加しましょう。

<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>
</dependencies>

Gsonでは、TypeToken を使ってジェネリクスの型情報を指定し、toJson() メソッドで変換を行います。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.jupiter.api.Test;

import java.lang.reflect.Type;
import java.util.SortedMap;
import java.util.TreeMap;

public class ConvertJavaMapToJson {

    @Test
    public void convertMapToJson() {
        SortedMap<String, String> elements = new TreeMap();
        elements.put("Key1", "Value1");
        elements.put("Key2", "Value2");
        elements.put("Key3", "Value3");

        Gson gson = new Gson();
        Type gsonType = new TypeToken<HashMap>(){}.getType();
        String gsonString = gson.toJson(elements,gsonType);
        System.out.println(gsonString);
    }
}

実行結果:

{"Key1":"Value1","Key2":"Value2","Key3":"Value3"}

org.jsonを使ってJavaのMapをJSONに変換する

最後の例では、org.jsonライブラリを使用してJavaのMapをJSONに変換します。こちらも同様に、まず pom.xml に依存関係を追加します。

<dependencies>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180813</version>
    </dependency>
</dependencies>

org.jsonでは、Mapオブジェクトをそのまま JSONObject のコンストラクタに渡すだけで変換できるため、非常にシンプルに記述できます。

import org.json.JSONObject;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

public class ConvertJavaMapToJson {

    @Test
    public void convertMapToJson() {
        Map<String, String> elements = new HashMap<>();
        elements.put("Key1", "Value1");
        elements.put("Key2", "Value2");
        elements.put("Key3", "Value3");

        JSONObject json = new JSONObject(elements);

        System.out.println(json);
    }
}

実行結果:

{"Key2":"Value2","Key1":"Value1","Key3":"Value3"}

まとめ

JavaのMapをJSONに変換するには、Jackson、Gson、org.json のいずれのライブラリでも簡単に実装できます。それぞれ特徴があり、Spring環境ならJackson、Android開発ならGson、軽量な用途ならorg.jsonが選ばれることが多いです。また、要素の順序を保持したい場合は HashMap の代わりに TreeMapSortedMap)を使うことを忘れないようにしましょう。

  1. 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;

  2. JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説

    このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。 JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。 データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。 まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納さ