AndroidでJSON⇔配列(List)にパース変換する2通りのやり方【kotlin】

Android開発にてJSONを扱ってた時

次みたいなことを実現したかったです。

  • 配列を表すJSON文字列がある
  • それを配列(List)に変換したい

このように書くと簡単にできそうですが、
Java・Kotlinでは少しだけ工夫が必要です。

そこで自分自身の記憶の整理として、
AndroidでJSONパース⇒配列変換の方法をまとめます。

方法1.JSONArrayを使うのが一番簡単かも

真っ先に思いついたのがJSONArrayを使うこと

これは文字通りJSONを配列で解析できる奴です。

▼ このようなコードでJSON解析できる

ただしこのままだとJSONArrayとして参照することになり、配列として扱うには不便です。(要素の追加・削除などがLIstにくらべて制限される)

JSON⇒JSONArray⇒配列(List)に変換(デコード)

そこで配列化≒List化してみます。

▼ JSONArrayをmutable配列に変換する

配列化するのは少し面倒かもしれません。

もっといい方法がないか模索中

配列(List)⇒JSONArray⇒JSONに変換(エンコード)

逆に配列⇒JSONArray⇒JSONにする方法について

▼ このようなコードで実現できる

これで文字列として配列をシリアライズできました。

配列をストレージに保存するのに便利です。

方法2.Kotlin serialization JSON ライブラリを使う

お次はKotlin限定のライブラリを使う方法

「Kotlin serialization JSON」

これを使うと簡単にJSON⇒配列へのパース、
配列⇒JSONへのエンコードができるようになります。

まずbuild.gradleにライブラリを追加する

導入するためにbuild.gradleを開きます。

開くのはモジュールレベルの方です。

▼ そこに以下ライブラリを追加

現時点の最新バージョンは1.3.2

あとは Sync now を押して同期します。

これを使ってJSON⇔配列の変換をしてみる

使い方はとても簡単です。

  • JSON⇒配列/Listにパースするとき
    パースするときは Json.decodeFromString() を使う
  • 配列/List⇒JSONにエンコードするとき
    JSON文字列化するには Json.encodeToString() を使う

この2つのメソッドが対になってる感じ

 

Android開発での実用的なコードを考えてみます。

例えばSharedPreferencesに配列を保存したいとき…

配列・Listを直接保存なんてできません。
だからJSONとしてシリアライズ化して保存します。

▼ ものすごく簡略化したコード例

Androidでアプリ設定を保存するとき……SharedPreferencesが使えるけど配列・ArrayListを保存できなのが超不便です。

似た機能として putStringSet() というメソッドもあるけど、これはSet<String>を保存するためであり Listのように要素オーダーは保持しません

だからJSONを使う必要があったわけですね。

同じことはJSONArrayを使ってもできます。

JSONArrayの方法よりライブラリ使う方が楽

どっちを使うかは状況次第ですね。

  • JSONArrayを使うと余計なライブラリは必要なし
  • でもJSON⇒JSONArray⇒配列という冗長さあり

その点ライブラリを使うと一発で変換ができます。

JSONArrayはライブラリの導入コストを嫌う人、
余計なライブラリを増やしたくない人向けですね。

JSON⇔配列に変換する方法のまとめ

ということで紹介した方法のまとめ

  1. JSONArrayを使ってJSON変換する
    ライブラリなどを導入しなくても使えるからお手軽。ただしエンコード・デコードにはそれなりの工夫が必要になるから少し面倒かもしれない。
  2. Kotlin serialization JSON ライブラリを使う
    ライブラリの導入コストがかかるがJSON⇔配列のエンコード・デコードが楽にできる。特に配列をSharedPreferencesに保在したいときに便利

以上、AndroidでのJSON⇔配列の変換でした。ではまた

もしもっといい方法があれば教えてください。