Help us understand the problem. What is going on with this article?

[Kotlin] JSON To Kotlin Classを使ってJSONからデータクラスを生成する

はじめに

JSON To Kotlin ClassはAndroid Studio、IntelliJ IDEAで動作するプラグインです。
このプラグインを使うとJSONからデータクラスを簡単に生成することができます。

JSON To Kotlin Classをインストールする

今回はIntelliJ IDEAで動作を確認していこうと思います。
次の手順でJSON To Kotlin Classをインストールします。

  1. 「IntelliJ Idea」を起動する
  2. 「IntelliJ Idea」->「Preferences」->「Plugins」を開く。
  3. 「Marketplace」->「Json To Kotlin Class」と入力する。
  4. 「JSON To Kotlin Class (JsonToClass)」の「Install」を選択する。
  5. 「Restart IDE」を選択し「IntelliJ Idea」を再起動する。

JSONの文字列からクラスを生成する

JSON To Kotlin Classを利用すれば、
次の手順でJSON文字列からデータクラスを生成することができます。

  1. 「Project」->「src」を右クリックし、「New」->「Kotlin data class File from Json」を選択する。
  2. 「Genrate Kotlin Data Class Code」にJSONファイルを貼り付ける。
  3. 「Class Name」に名称を入力する。
  4.  全ての入力が完了したら「Generate」を選択する。

次のような感じで今回はGitHub APIのGET /repos/:owner/:repo/contributorsにて
取得できる次のJSONを貼りつけてみました、そのため"Class Name"はContributorとしました。

Generateを選択した後、自動的に次のようなデータクラスが生成されます。
はい上手くデータクラスが出力されていますね。

Contributor.kt
data class Contributor(
    val avatar_url: String,
    val contributions: Int,
    val events_url: String,
    val followers_url: String,
    val following_url: String,
    val gists_url: String,
    val gravatar_id: String,
    val html_url: String,
    val id: Int,
    val login: String,
    val node_id: String,
    val organizations_url: String,
    val received_events_url: String,
    val repos_url: String,
    val site_admin: Boolean,
    val starred_url: String,
    val subscriptions_url: String,
    val type: String,
    val url: String
)

データクラスを生成する際のルールを設定する

JSON To Kotlin Classではデータクラスを生成する際のルールを設定できます。
次の手順で設定画面は開くことができます。

  1. 「Project」->「src」を右クリックし、「New」->「Kotlin data class File from Json」を選択する。
  2. 「Genrate Kotlin Data Class Code」 の「Advanced」を選択する。

次のような感じで大きく分けてProperty,Annotation,Other,Extensionsの設定があるようです。
まぁ主に使うのはPropertyのところにはなるとは思います。

例えば「Property」->「Keyword」を「Var」に変更すると、
次のようにプロパティがVarで宣言されたデータクラスが生成されます。

Contributor.kt(Var)
data class Contributor(
    var avatar_url: String,
    var contributions: Int,
    var events_url: String,
    var followers_url: String,
    var following_url: String,
    var gists_url: String,
    var gravatar_id: String,
    var html_url: String,
    var id: Int,
    var login: String,
    var node_id: String,
    var organizations_url: String,
    var received_events_url: String,
    var repos_url: String,
    var site_admin: Boolean,
    var starred_url: String,
    var subscriptions_url: String,
    var type: String,
    var url: String
)

また「Property」->「Type」を「Nullable」に変更すると、
次のようにプロパティがNULLを許容できるようにデータクラスが生成されます。

Contributor.kt(Nullable)
data class Contributor(
    val avatar_url: String?,
    val contributions: Int?,
    val events_url: String?,
    val followers_url: String?,
    val following_url: String?,
    val gists_url: String?,
    val gravatar_id: String?,
    val html_url: String?,
    val id: Int?,
    val login: String?,
    val node_id: String?,
    val organizations_url: String?,
    val received_events_url: String?,
    val repos_url: String?,
    val site_admin: Boolean?,
    val starred_url: String?,
    val subscriptions_url: String?,
    val type: String?,
    val url: String?

また「Property」->「Default Value Strategy」を「Init With Non-Null Default Value(Avoid Null)」に
変更すると次のように初期化値をNULL以外に初期化してくれるデータクラスを生成できます。

Contriburt.kt(InitWithNonNullDefaultValue(AvoidNull)
data class Contributor(
    val avatar_url: String = "",
    val contributions: Int = 0,
    val events_url: String = "",
    val followers_url: String = "",
    val following_url: String = "",
    val gists_url: String = "",
    val gravatar_id: String = "",
    val html_url: String = "",
    val id: Int = 0,
    val login: String = "",
    val node_id: String = "",
    val organizations_url: String = "",
    val received_events_url: String = "",
    val repos_url: String = "",
    val site_admin: Boolean = false,
    val starred_url: String = "",
    val subscriptions_url: String = "",
    val type: String = "",
    val url: String = ""
)

こんな感じである程度はデータクラスを生成するときのルールを設定できるようです。

おわりに

  • JSONからデータクラスを生成するにはJSON To Kotlin Class プラグインが使える
  • JSONを貼ってGenerateするだけでデータクラスが生成できる
  • JSONからデータクラスを生成するときのルールを設定できる

参考

タイトル 簡単な説明
JsonToKotlinClass - GitHub GitHubにオプション設定の詳細が記載されているので、詳しい設定がしたい場合はここを閲覧する。
JsonToKotlinClass(JsonToKotlinClass) Plugins - JetBrains プラグインの説明ページです。
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away