Java で JSON をマップに変換する方法

  1. Java で JSONMap に変換する Jackson ライブラリ
  2. Java で JSONMap に変換するための GSON ライブラリ

Java で既存の JSON を Map に変換する方法を紹介します。JSON はデータの構造化に使われることが多いですが、JSON の値を何か別のデータ型に取得してから作業をしなければならないこともあります。

Java で JSON を扱うためにいくつかのライブラリが作成されています。ここでは、多くの JSON 操作を行うことができる、最もよく使われている 2つの JSON パースライブラリを見ていきます。

以下は、理解を深めるためにこのチュートリアルで扱う予定の JSON です。

{
  "login" :
  {
    "userName" : "John Doe",
    "email" : "[email protected]"
  }
}

Java で JSONMap に変換する Jackson ライブラリ

Jackson ライブラリのメソッドやクラスを継承できるようにするために、以下の依存関係をプロジェクトに追加する必要がある。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
    <scope>compile</scope>
</dependency>

依存関係を追加した後、まず FileInputStream() メソッドを用いてローカルの JSON ファイルを取得する。

JSONMap に変換するには、Jackson ライブラリから ObjectMapper().readValue() を呼び出す必要があります。関数 readValue(JSON, ClassType) は 2つの引数をとり、JSON をフォーマットしたい JSONClassType を指定します。JSONMap 形式に変換したいので、Hashmap.class を利用します。

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) throws IOException {

        InputStream getLocalJsonFile = new FileInputStream("/sample.json");

        HashMap<String,Object> jsonMap = new ObjectMapper().readValue(getLocalJsonFile, HashMap.class);
        System.out.println(jsonMap);

    }
}

出力:

{login={userName=John Doe, [email protected]}}

Java で JSONMap に変換するための GSON ライブラリ

まず、アプリケーションにすべての GSON メソッドとクラスを含めるために、プロジェクトの依存関係を含める必要があります。

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

GSON は広く使われている JSON ライブラリで、これを解析して Java Map に変換します。

Gson().fromJson(json、type) には 2つの引数が必要です。1つは JSON ファイルで、new JsonReader(new FileReader(jsonFilePath)) で取得することができます。で、2つは JSON を変換したい型です。

以下の例を見てください。

import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;

import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws IOException {

        JsonReader getLocalJsonFile = new JsonReader(new FileReader("/sample.json"));

        Type mapTokenType = new TypeToken<Map<String, Map>>(){}.getType();

        Map<String, String[]> jsonMap = new Gson().fromJson(getLocalJsonFile, mapTokenType);

        System.out.println(jsonMap);

    }
}

出力:

{login={userName=John Doe, [email protected]}}

関連記事 - Java JSON

  • Java でハッシュマップを JSON オブジェクトに変換する方法
  • 関連記事 - Java Map

    comments powered by Disqus