Swift → JSON コンバーター
Swift の struct や Codable 型を貼り付けると、きれいな JSON が返ってきます。
このツールでできること
Swift の struct を定義して Codable に準拠させたものの、playground やシミュレーターを立ち上げずに JSON だけ欲しい、という場面はよくあります。このツールはまさにそれを解決します。Swift をここに貼り付ければ、JSONEncoder も Xcode も Swift Package Manager も触らずに有効な JSON が返ってきます。単一の struct インスタンスでも、複数の型を含むファイル全体でも、ネストした配列や Optional を含むコードでも結果は同じです。すべてのプロパティが保持されたきれいな JSON ドキュメントになります。
このコンバーターは、Swift の値が JSONEncoder で実際にシリアライズされる挙動に沿って動作します。String、Int、Double、Bool はそのまま対応する JSON 型にマップされます。[Item] 配列は JSON 配列に、[String: V] 辞書は JSON オブジェクトになります。Optional<T> が nil の場合は JSON の null になります(エンコーダー戦略によっては省略されます)。UUID は標準的な 16 進文字列、Date は ISO-8601 文字列、URL は文字列として出力されます。raw value を持つ enum はその値を出力します — Foundation.JSONEncoder と同じ挙動です。
カスタム CodingKeys もそのまま尊重されます。JSON 用にプロパティ名を変更している場合(case shippingAddress = "shipping_address")、出力はリネーム後のキーを使います。ネストした Codable 型はインラインで展開されます。複数の struct をまとめて貼り付けると、それぞれが出力のトップレベルエントリになります。Swift が JSON をどうモデリングしているかもっと深く知りたい場合は、ソースコードは apple/swift にあり、Codable プロトコルのわかりやすい解説は Hacking with Swift にあります。
使い方
ステップは 3 つです。struct のインスタンス 1 つでも、モデルファイル丸ごとでも手順は同じです。
Swift を貼り付け(またはサンプルを読み込む)
左側のエディターに Swift をそのまま貼り付けてください。struct、class、関連値付き enum、複数の型、ネストした配列や辞書 — すべて問題なく扱えます。まずは現実的な例を見たい場合は Load Sample をクリックしてください。
import Foundation や @available 属性を削除する必要はありません。Swift の構文をそのまま残してください — パーサーが適切に処理します。
「変換」をクリック
緑色の 変換 ボタンをクリックします。Swift を読み込み、すべてのプロパティとネストした型を保持したまま、JSON を一度に出力します。処理中は短いローディングインジケーターが表示されます。
JSON をコピー
右側のパネルにインデント付きの JSON が入ります。URLSession のテスト、MockURLProtocol のフィクスチャ、OpenAPI のサンプル、REST クライアントなどにそのままコピーしてください。これで完了です。
こんな場面で本当に助かる
iOS API のフィクスチャ
<code>URLSession</code> 呼び出し用のリクエスト struct があり、Postman やテスト用に JSON ペイロードが必要 — struct を貼り付けて JSON を取得し、次の作業に進めます。
モックサーバーのレスポンス
レスポンスの <code>Codable</code> 型を、モックサーバーや <code>MockURLProtocol</code>、録画済みレスポンスファイルに投入できる JSON に変換します。<code>JSONEncoder</code> の呼び出しは一切不要です。
Vapor / SwiftNIO バックエンドのテスト
20 個の <code>Content</code> 型を抱える Vapor サービスでも、encode を 1 行も書かずに統合テスト用の JSON シードファイルを生成できます。
ドキュメントと OpenAPI の例
実際のモデルから直接 OpenAPI 仕様や API リファレンス用の JSON 例を生成できるので、ドキュメントが常に同期した状態に保てます。
よくある質問
型は Codable に準拠している必要がありますか?
ツールが動作するために、コード上で実際に準拠している必要はありません — コンバーターは型の形を読み取って直接 JSON を生成します。実アプリでは、Codable(少なくとも Encodable)が JSONEncoder 経由でランタイムに同じ結果を得る方法です。
カスタム CodingKeys は反映されますか?
はい。型が enum CodingKeys: String, CodingKey をカスタム raw value 付きで定義していれば(例: case shippingAddress = "shipping_address")、出力はリネーム後のキーを使用します。
Optional、Date、UUID はどう扱われますか?
Optional<T> が nil の場合は JSON の null になります。Date はデフォルトで ISO-8601 文字列として出力されます(JSONEncoder.DateEncodingStrategy.iso8601 と同じ)。UUID は標準的な 16 進文字列、URL は文字列になります。
関連値を持つ enum はどうなりますか?
raw value を持つ enum はその値を直接出力します。関連値を持つ enum はタグ付きオブジェクトとして出力されます — 関連値付きの case を Swift 自身がエンコードするときの形と同じです。
貼り付けたコードは保存されますか?
コードは変換のためにバックエンドへ送られますが、保存されません — ペイロードのログも取りません。機密性の高いコードは貼り付ける前に確認してください。
SwiftUI のモデルや property wrapper でも動きますか?
はい — @Published のような property wrapper は内部の値に展開されます。@Published プロパティを持つ ObservableObject クラスもきれいにシリアライズできます。SwiftUI 固有のビュー型はシリアライズ可能なデータではありませんが、ビューの背後にあるモデルは問題なく扱えます。
ほかに役立つツール
Swift → JSON はパズルのひとピースです。以下のツールと組み合わせるとさらに便利です: