「JavaでJSONとMapの変換を習得する!JacksonライブラリとGsonを使用した方法」
はじめに
Javaでよく使われるデータ構造に、JSONとMapがあります。
これら二つは頻繁に使われ、また互換性が高いため、相互に変換することが多々あります。本記事では、Javaを使ってJSONとMapを相互に変換する具体的な方法を5つのステップで学んでいきましょう。
Jacksonライブラリを使用した方法
まずは、JSONとMapの変換を行うためのライブラリをインポートします。ここでは、Jacksonライブラリを使用します。以下のようにインポートします。
ソースコード例
1 |
import com.fasterxml.jackson.databind.ObjectMapper; |
MapをJSONに変換
次に、MapをJSONに変換する方法を見ていきましょう。
以下のソースコードでは、HashMapを作成し、それをJSONに変換しています。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; public class Program { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); String json = objectMapper.writeValueAsString(map); System.out.println(json); } } |
KindleUnlimited会員であれば、全ての本をご覧頂けます。 StreamAPIを理解すれば、Javaの世界が変わる 第1版
出力結果
上記のコードを実行すると、以下のような出力結果が得られます。
出力結果
{"key1":"value1","key2":"value2"}
JSONをMapに変換
それでは次に、JSONをMapに変換する方法を見ていきましょう。
以下のソースコードでは、JSON文字列をMapに変換しています。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 |
import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; public class Program { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); String json = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; Map<String, String> map = objectMapper.readValue(json, Map.class); System.out.println(map); } } |
出力結果
上記のコードを実行すると、以下のような出力結果が得られます。
出力結果
{key1=value1, key2=value2}
エラーハンドリング
JSONとMapの変換時には、エラーハンドリングも重要です。
変換に失敗すると例外が発生しますので、try-catch文を使用して例外を適切に処理しましょう。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.Map; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class Program { public static void main(String[] args) { ObjectMapper objectMapper = new ObjectMapper(); String json = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; try { Map<String, String> map = objectMapper.readValue(json, Map.class); System.out.println(map); } catch (JsonProcessingException e) { e.printStackTrace(); } } } |
高度な変換
最後に、少し複雑なJSONとMapの変換について見てみましょう。
以下の例では、JSONの配列とJavaのリストを変換しています。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.List; import java.util.Map; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; public class Program { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); String json = "[{\"key1\":\"value1\"},{\"key2\":\"value2\"}]"; List<Map<String, String>> list = objectMapper.readValue(json, new TypeReference<List<Map<String, String>>>(){}); System.out.println(list); } } |
出力結果
上記のコードを実行すると、以下のような出力結果が得られます。
出力結果
[{key1=value1}, {key2=value2}]
mapとリストの相互変換の記事もCHECK
-
【Java】listをmap、mapをlistに変換する方法を解説! 今回はStreamAPIを使用した方法を紹介します。
javaでlistをmapに変換する方法 プログラミング言語Javaでは、コレクションというデータ構造を扱うためのフレームワークが提供されています。 この記事では、「JavaでListをMapに変換す ...
続きを見る
Gsonライブラリを使用した方法
ここからは、JavaでJSONとMapの変換を、ライブラリのGsonを使って実装する方法を紹介します!
Gsonライブラリの導入
GsonはGoogleが開発している、JavaオブジェクトとJSONとの相互変換を支援するライブラリです。
まずは、Gsonをプロジェクトに導入することから始めましょう。以下の手順でMavenプロジェクトに追加可能です。
pom.xmlに追加
1 2 3 4 5 6 7 |
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.8</version> </dependency> </dependencies> |
JSONをMapに変換
まずは、JSON文字列をJavaのMapオブジェクトに変換してみましょう。
以下のサンプルコードは、JSON文字列をMapオブジェクトに変換する基本的な例です。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.Map; class Program { public static void main(String[] args) { String json = "{ \"key1\": \"value1\", \"key2\": \"value2\" }"; Gson gson = new Gson(); Type type = new TypeToken<Map<String, String>>() {}.getType(); Map<String, String> map = gson.fromJson(json, type); System.out.println("Map: " + map); } } |
出力結果
Map: {key1=value1, key2=value2}
MapをJSONに変換
次に、JavaのMapオブジェクトをJSON文字列に変換してみましょう。
以下のサンプルコードは、MapオブジェクトをJSON文字列に変換する基本的な例です。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; class Program { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); Gson gson = new Gson(); String json = gson.toJson(map); System.out.println("JSON: " + json); } } |
出力結果
JSON: {"key1":"value1","key2":"value2"}
複雑なオブジェクトとの変換
では、もう少し複雑なオブジェクトとJSONの変換はどうするのでしょうか。
次に、Javaのオブジェクトが内包されたMapをJSONに変換する例を見てみましょう。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; class User { String name; int age; User(String name, int age) { this.name = name; this.age = age; } } class Program { public static void main(String[] args) { User user = new User("Alice", 30); Map<String, User> map = new HashMap<>(); map.put("user", user); Gson gson = new Gson(); String json = gson.toJson(map); System.out.println("JSON: " + json); } } |
出力結果
JSON: {"user":{"name":"Alice","age":30}}
API通信とJSONの利用
JavaでHTTP通信を行い、APIから取得したJSONを解析する基本的な流れを見ていきましょう。
ここでは、Java標準のHttpURLConnectionクラスとGsonを用いて、シンプルなAPI通信を行い、結果をオブジェクトにマッピングする例を示します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import com.google.gson.Gson; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; class User { String name; int age; } class Program { public static void main(String[] args) { try { URL url = new URL("https://api.example.com/user"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); Gson gson = new Gson(); User user = gson.fromJson(response.toString(), User.class); System.out.println("Name: " + user.name); System.out.println("Age: " + user.age); } catch (Exception e) { e.printStackTrace(); } } } |
出力結果
Name: Alice Age: 30
まとめ
以上、2つの方法(JacksonとGsonライブラリを使った方法)でJSONとMapを相互に変換する方法について見てきました。
ここで学んだ方法を使って、さまざまな形式のJSONとJavaのMapを変換することができます。また、エラーハンドリングを行うことで、例外が発生した際の対処も可能です。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!
mapとリストの相互変換の記事もCHECK
-
【Java】listをmap、mapをlistに変換する方法を解説! 今回はStreamAPIを使用した方法を紹介します。
javaでlistをmapに変換する方法 プログラミング言語Javaでは、コレクションというデータ構造を扱うためのフレームワークが提供されています。 この記事では、「JavaでListをMapに変換す ...
続きを見る