JSON → Kotlin data class 変換ツール

JSONからKotlinのdata classを生成します。toJson・fromJsonヘルパー付きです。

JSONからKotlinのdata classを生成

Kotlinのdata classは、AndroidやJVMでJSONを扱うためのモデル型として最適です。このツールはオブジェクトごとにイミュータブルなvalプロパティを持つdata classを生成します。整数はLong、小数はDouble、配列はList<T>になり、ネストしたオブジェクトはそれぞれ独自のdata classになります。生成されるコードはKlaxonライブラリを使用し、toJsonメソッドとcompanionのfromJson関数を追加するため、1回の呼び出しでJSON文字列を型付きのオブジェクトに変換できます。

使い方

  1. Androidアプリが受け取るレスポンスなど、JSONサンプルを貼り付けます。
  2. ルートクラスの名前を入力します(例: Movie)。
  3. Klaxonの依存関係を追加し、クラスをパッケージ内の.ktファイルに貼り付けて、Movie.fromJson(jsonString)を呼び出します。

よくある質問

kotlinx.serialization、Moshi、Gsonでもこのクラスを使えますか?
はい。data classの宣言自体は純粋なKotlinです。Klaxonのヘルパーを削除し、kotlinx.serializationなら@Serializableのように、使用するライブラリのアノテーションを各クラスに追加してください。
nullになり得るフィールドはどう生成されますか?
サンプルの一部でnullまたは欠落しているフィールドは、String?のようなnull許容型になるため、Kotlinのnull安全性によって適切な処理が求められます。
IntではなくLongなのはなぜですか?
JSONの整数にはサイズの上限がないため、オーバーフローを避けられるLongを使っています。年や件数など値が小さいとわかっている場合は、プロパティをIntに変更してください。

例: JSONからKotlinへの変換

入力JSON

{
  "id": 12,
  "title": "Arrival",
  "year": 2016,
  "genres": ["sci-fi", "drama"],
  "rating": 7.9
}

生成されたKotlin(Movie)

// To parse the JSON, install Klaxon and do:
//
//   val movie = Movie.fromJson(jsonString)

package quicktype

import com.beust.klaxon.*

private val klaxon = Klaxon()

data class Movie (
    val id: Long,
    val title: String,
    val year: Long,
    val genres: List<String>,
    val rating: Double
) {
    public fun toJson() = klaxon.toJsonString(this)

    companion object {
        public fun fromJson(json: String) = klaxon.parse<Movie>(json)
    }
}

JSONを他の言語に変換