11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-11-01

はじめに

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 プラグインの説明ページです。
11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?