HOWTO · Java

Java でハッシュマップを JSON オブジェクトに変換する方法

ハッシュマップを単純な JSON オブジェクトに変換する方法を説明しています。

このページの内容

この記事では、Java でハッシュマップを JSON オブジェクトに変換する方法を紹介します。ハッシュマップを作成し、それを JSON オブジェクトに変換する例を詳しく見ていきます。

ハッシュマップと JSON はどちらも開発者にとって非常に一般的なもので、データを簡単に転送したり保存したりすることができるシンプルな構造を作るのに役立ちます。

ハッシュマップを JSON オブジェクトに変換する new JSONObject(hashmap)

ハッシュマップを JSON オブジェクトに変換する最も伝統的な方法は、JSONObject() を呼び出してハッシュマップを渡すことです。

ハッシュマップを作成し、それを JSON 形式で出力する例を見てみましょう。

import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONObject;

public class Main {
  public static void main(String[] args) {
    Map<String, Object> map = new HashMap();

    map.put("key1", "value1");
    map.put("key2", "value2");

    JSONObject json = new JSONObject(map);
    System.out.printf("JSON: %s", json);
  }

出力:

JSON: {"key1":"value1","key2":"value2"}

ここで注意すべきことの一つは、Map<String, Object> は key である文字列と value であるオブジェクトを受け取るということです。つまり、有効な Object を値としてマップに渡し、それを JSON オブジェクトとして変換することができます。

以下は文字列と Arraylist を値として受け取る例です。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONObject;

public class Main {
  public static void main(String[] args) {
    ArrayList<String> stringArrayList = new ArrayList<>();
    stringArrayList.add("firstString");
    stringArrayList.add("secondString");
    stringArrayList.add("thirdString");

    Map<String, Object> map = new HashMap();
    map.put("key1", "value1");
    map.put("key2", "value2");
    map.put("stringList", stringArrayList);

    JSONObject json = new JSONObject(map);
    System.out.printf("JSON: %s", json);
  }

出力:

JSON: {"key1":"value1","key2":"value2","stringList":["firstString","secondString","thirdString"]}

ハッシュマップを JSON オブジェクトに変換する Jackson ライブラリ

Java には、ハッシュマップを柔軟に JSON オブジェクトに変換するのに役立つライブラリがあります。

Jackson はそのようなライブラリの一つで、Java map を受け取り、そのマップを JSON 形式に変換します。

ObjectMapper().writeValueAsString(map) は互換性のないデータ形式を検出すると例外をスローする可能性があるため、JsonProcessingException を処理することを忘れないでください。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) throws JsonProcessingException {
    Map<String, Object> map = new HashMap();
    map.put("key1", "value1");
    map.put("key2", "value2");

    String json = new ObjectMapper().writeValueAsString(map);
    System.out.printf("JSON: %s", json);
  }

出力:

JSON: {"key1":"value1","key2":"value2"}

ハッシュマップを JSON オブジェクトに変換する GSON ライブラリ

Gson ライブラリはハッシュマップを JSON オブジェクトに変換するために最もよく使われているライブラリの一つです。Gson ライブラリはハッシュマップと JSON を扱うための簡単なメソッドを提供しています。

Gson クラスには toJsonTree というメソッドがあり、これはハッシュマップを JSON ツリーに変換します。しかし、JSON オブジェクトが必要なので、toJSONObject() を使って JSON ツリーを JSON オブジェクトにすることができます。

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Map<String, Object> map = new HashMap();
    map.put("key1", "value1");
    map.put("key2", "value2");

    Gson gson = new Gson();
    JsonObject json = gson.toJsonTree(map).getAsJsonObject();

    System.out.printf("JSON: %s", json);
  }

出力:

JSON: {"key1":"value1","key2":"value2"}