【Android】KotlinとJavaでMapをGSONを使用してJSONに変換する


はじめに

GSONは、Googleが提供するJSONのパースするライブラリである。
JavaのオブジェクトとJSONを変換できるがKotlinでも可能である。
今回はKotlinのMutableMapと変換が簡単にできたので共有したい。

GSONの使い方

Android Studioのに以下の記述をする。

build.gradle
dependencies {
    implementation 'com.google.code.gson:gson:*.*.*'
}

..*」最新のバージョンを記載する。
最新バージョンは以下から確認する。
https://github.com/google/gson

上記を記載したらAndroid Studio上の「Sync Now」をクリックすれば準備完了。

これでプロジェクトでGSONが使用可能となる。

JavaのMapをJSON変換

JSON変換処理を以下のように実装してみた。

Sample.java
public void test(){
    ArrayMap<String, String> map = new ArrayMap<>();
    map.put("a1", "A1");
    map.put("a2", "A2");
    map.put("a3", "A3");

    Gson gson = new Gson();
    String jsonString = gson.toJson(map);
    Log.d("Java", jsonString);

    Type type = new TypeToken<ArrayMap<String, String>>(){}.getType();
    ArrayMap<String, String> map2 = gson.fromJson(jsonString, type);
    for (String mapValue : map2.values()) {
        Log.d("Java", mapValue);
    }
}

Logを確認すると

D/Java: {"a1":"A1","a2":"A2","a3":"A3"}
D/Java: A1
  A2
  A3

のようになる。JSON変換できることが確認できた。
ここまでは前からできたので目新しいことはない。

KotlinのMapをJSON変換

ここからが本題。
上記のJavaの実装をKotlinで実装する。
MapはKotlinのMutableMapを使用する。

Sample.kt
fun test(){
    val map : MutableMap<String, String> = mutableMapOf()
    map.put("a1", "A1")
    map.put("a2", "A2")
    map.put("a3", "A3")

    val gson = Gson()
    val jsonString : String = gson.toJson(map)
    Log.d("Kotlin", jsonString)
    val type : Type = object : TypeToken<MutableMap<String, String>>() {}.type

    val map2 : MutableMap<String, String> = gson.fromJson(jsonString, type)
    for (mapValue in map2.values) {
        Log.d("Kotlin", mapValue)
    }
}

Logを確認すると

D/Kotlin: {"a1":"A1","a2":"A2","a3":"A3"}
D/Kotlin: A1
     A2
     A3

のようになる。Javaと同様にJSON変換できることが確認できた。

終わりに

Kotlinの使いやすさはGOOD!