Kotlin → JSON コンバーター
Kotlin の data class やオブジェクトを貼り付けると、きれいな JSON が返ってきます。
このツールでできること
ユニットテストやフィクスチャ、API 呼び出しのために Kotlin の data class に合わせた JSON ペイロードを手書きした経験があれば、その面倒くささは身に染みているはずです。通常は kotlinx.serialization を入れてクラスにアノテーションを付け、アプリを走らせて出力を取るという流れになります。ここに Kotlin を貼り付ければ、Gradle プラグインも @Serializable もランタイムも不要で、そのまま有効な JSON が手に入ります。
このコンバーターは Kotlin の実際のシリアライズ挙動を踏襲します。val price: Double = 49.99 は JSON の数値に、val tags: List<String> は JSON 配列に、val address: Address? が null のときは JSON の null になります。kotlin.stdlib の Instant、LocalDate、LocalDateTime は ISO-8601 文字列として出力され、UUID は標準的な hex 文字列になります。Map<String, V> は JSON オブジェクト、enum class の値は文字列名で出ます — これは Gson や jackson-module-kotlin と同じ挙動です。
シリアライゼーション用アノテーションも尊重されます。@SerialName("x") は JSON キーをリネームし、@Transient はプロパティを除外します。明示的に値が設定されていないプロパティについてはデフォルト値が出力されます。複数の data class をまとめて貼り付ければ、それぞれがトップレベルのエントリとして出力され、ネストした型は展開され、sealed class 階層はバリアントに平坦化されます。Android アプリをリリースしているなら、出力はそのまま Retrofit のフィクスチャや Room のテスト seed に使えます。
使い方
3 ステップだけです。単発のインスタンスでも、data class がぎっしり詰まったファイル 1 本でも、操作は同じです。
Kotlin を貼り付ける(またはサンプルを読み込む)
左のエディターに Kotlin をそのまま貼り付けてください。data class、通常のクラス、object 宣言、複数クラス、sealed 階層 — どれでも OK です。まずは サンプルを読み込む をクリックして実例を確認できます。
import、パッケージ宣言、アノテーションを剥がす必要はありません。Kotlin の構文 はそのままで大丈夫です — companion object や backing field も通ります。
変換を押す
緑の 変換 ボタンをクリックします。ツールは Kotlin を読み取り、すべての data class とプロパティを保ったまま、一度の処理で JSON を出します。処理中は短いローディング表示が出ます。
JSON をコピーする
右パネルにインデント済みの JSON が並びます。Retrofit のテスト、Room のフィクスチャ、OpenAPI のサンプル、REST クライアントなどにそのまま貼り付けてください。ループはこれで終わりです。
実際に役立つ場面
Android アプリの API フィクスチャ
Retrofit のリクエストモデルがあって、MockWebServer や Postman に流し込む JSON ペイロードが欲しい — data class を貼り付けて JSON を取ったら、次の作業へ。
バックエンドのテストデータ
30 個の data class を持つ Ktor や Spring のサービス。各クラスを結合テスト用の JSON seed ファイルに変換する際、<code>@Serializable</code> アノテーションを一つも書かずに済みます。
ずれないドキュメント
実在の data class から直接 OpenAPI 仕様や API リファレンス用の JSON サンプルを生成できるので、ドキュメントがモデルとずれることがなくなります。
設定ファイルのたたき台
プロパティが 20 個超の Settings data class も、即編集できる JSON テンプレートに変わります — ボイラープレートを手書きする必要はありません。
よくある質問
kotlinx.serialization や Jackson のインストールは必要ですか?
必要ありません。このツールはサーバー側で動作し、コードをコンパイルしません — プラグインなしで JSON を得られます。アプリ内でランタイムのシリアライゼーションが欲しい場合は、ネイティブ選択肢の kotlinx.serialization が適しています。jackson-module-kotlin も使えます。
@SerialName、@Transient、@JsonProperty は尊重されますか?
はい。@SerialName("x") と @JsonProperty("x") は JSON キーをリネームし、@Transient / @JsonIgnore は出力からプロパティを除外します — kotlinx.serialization のセマンティクスに揃えています。
Instant、LocalDate、UUID はどう扱われますか?
Instant、LocalDate、LocalDateTime、ZonedDateTime はすべて ISO-8601 文字列として出力されます。UUID は標準的な 8-4-4-4-12 の hex 文字列になります。Duration は duration 文字列になります。
nullable、sealed class、enum はどう扱われますか?
値が null の nullable プロパティは JSON の null になり、それ以外では内部型が通常どおりシリアライズされます。sealed class のインスタンスはデフォルトで型ディスクリミネーターを含みます(kotlinx.serialization を使っていれば設定変更可能)。enum は特別なアノテーションがない限り文字列名で出力されます。
貼り付けたコードは保存されますか?
コードは変換のためにバックエンドに送られますが、保存はされません — ペイロードはログにも残しません。とはいえ機密性の高いコードは貼り付ける前にざっと確認してください。
Kotlin/JVM と Kotlin Multiplatform の両方で動きますか?
はい。構文が有効な Kotlin であれば、ターゲットが JVM、JS、Native、Multiplatform のどれであっても差はありません。JSON 表現を持たないプラットフォーム固有の型(Job や Flow など)は null として出力されます。
合わせて使えるツール
Kotlin → JSON はパズルの 1 ピースにすぎません。以下とも相性が良いです: