Java で JSON をマップに変換する方法
Java で既存の JSON を Map に変換する方法を紹介します。JSON はデータの構造化に使われることが多いですが、JSON の値を何か別のデータ型に取得してから作業をしなければならないこともあります。
Java で JSON を扱うためにいくつかのライブラリが作成されています。ここでは、多くの JSON 操作を行うことができる、最もよく使われている 2つの JSON パースライブラリを見ていきます。
以下は、理解を深めるためにこのチュートリアルで扱う予定の JSON です。
{
"login" :
{
"userName" : "John Doe",
"email" : "johndoe@john.com"
}
}
Java で JSON
を Map
に変換する Jackson
ライブラリ
Jackson
ライブラリのメソッドやクラスを継承できるようにするために、以下の依存関係をプロジェクトに追加する必要があります。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
<scope>compile</scope>
</dependency>
依存関係を追加した後、まず FileInputStream()
メソッドを用いてローカルの JSON ファイルを取得します。
JSON
を Map
に変換するには、Jackson
ライブラリから ObjectMapper().readValue()
を呼び出す必要があります。関数 readValue(JSON, ClassType)
は 2つの引数をとり、JSON をフォーマットしたい JSON
と ClassType
を指定します。JSON
を Map
形式に変換したいので、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=johndoe@john.com}}
Java で JSON
を Map
に変換するための 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=johndoe@john.com}}
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn関連記事 - Java JSON
- Java で JSON データを文字列に変換する
- Java で JSON をデシリアライズする
- Java でオブジェクトを JSON にシリアライズする
- Java での JSON データのプリティプリント
- Java での JSON 配列の処理
- Java で XML を JSON に変換する