はじめに
JSON To Kotlin ClassはAndroid Studio、IntelliJ IDEAで動作するプラグインです。
このプラグインを使うとJSONからデータクラスを簡単に生成することができます。
JSON To Kotlin Classをインストールする
今回はIntelliJ IDEAで動作を確認していこうと思います。
次の手順でJSON To Kotlin Classをインストールします。
- 「IntelliJ Idea」を起動する
- 「IntelliJ Idea」->「Preferences」->「Plugins」を開く。
- 「Marketplace」->「Json To Kotlin Class」と入力する。
- 「JSON To Kotlin Class (JsonToClass)」の「Install」を選択する。
- 「Restart IDE」を選択し「IntelliJ Idea」を再起動する。
JSONの文字列からクラスを生成する
JSON To Kotlin Classを利用すれば、
次の手順でJSON文字列からデータクラスを生成することができます。
- 「Project」->「src」を右クリックし、「New」->「Kotlin data class File from Json」を選択する。
- 「Genrate Kotlin Data Class Code」にJSONファイルを貼り付ける。
- 「Class Name」に名称を入力する。
- 全ての入力が完了したら「Generate」を選択する。
次のような感じで今回はGitHub APIのGET /repos/:owner/:repo/contributorsにて
取得できる次のJSONを貼りつけてみました、そのため"Class Name"はContributorとしました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F79387%2Feac83b16-6468-ce92-b5b5-4c74ea1bd4f7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=435999e35481c658da1e2c5571ae6f9e)
Generateを選択した後、自動的に次のようなデータクラスが生成されます。
はい上手くデータクラスが出力されていますね。
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ではデータクラスを生成する際のルールを設定できます。
次の手順で設定画面は開くことができます。
- 「Project」->「src」を右クリックし、「New」->「Kotlin data class File from Json」を選択する。
- 「Genrate Kotlin Data Class Code」 の「Advanced」を選択する。
次のような感じで大きく分けてProperty,Annotation,Other,Extensionsの設定があるようです。
まぁ主に使うのはPropertyのところにはなるとは思います。
![]() |
![]() |
![]() |
![]() |
---|
例えば「Property」->「Keyword」を「Var」に変更すると、
次のようにプロパティが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を許容できるようにデータクラスが生成されます。
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以外に初期化してくれるデータクラスを生成できます。
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 | プラグインの説明ページです。 |