型定義の生成

JSONからSwiftサンプルをCodableモデルへ

フィールドのないレコードも加えると、Optionalの推論を確認できます。

JSONからSwift

JSON入力

解析と生成はこのブラウザ内で行います。入力は送信・保存しません。

生成ソース

生成オプション

Int64 / Decimal。Swift6.3.1・macOS26で実測。makeJSONDecoder()を使い、配布対象でも検証してください。

ルート配列は要素Rootを定義します。[Root].selfをデコードしてください。

構造体2件・Optionalプロパティ2件

JSONからSwiftでモデルを起こすときは、成功応答だけでなく項目が省略された例も用意してください。配列全体を調べるため、先頭の一件にはない違いも構造体に反映されます。

Codable自動生成は仕様書の代わりにはなりません。Swift構造体とCodingKeysを土台に、アプリ側で必須条件や将来のレスポンスを確認します。

JSONからSwiftを使う理由

レコード間の違いを反映

JSONからSwiftは同じ配列位置にあるオブジェクトを統合します。キーの欠落やnullはOptionalに反映し、常に存在する値は具体的な型を維持します。

二つのオブジェクトが一つのモデルにまとまり、空いたスロットがOptionalを示しています。

日時を勝手に変えない

日時らしい文字列も初期設定ではStringです。ISO推論を選ぶと、条件を満たす日時だけがDateと専用デコーダーにつながります。

日時カードから文字列を維持する経路と時計へ変換する経路が分岐しています。

読み込み方を決めてから使う

01

異なるオブジェクトを集める

ルートはオブジェクト、または空でないオブジェクト配列にします。配列なら要素のRootを生成するので[Root].selfをデコードします。ネストした配列も全要素が対象です。

02

名前と日時を調整する

snake_caseや記号を含むキーにはCodingKeysを残してください。原名維持とcamelCaseを選べます。ISO推論はタイムゾーン付きの完全な日時で、小数秒は三桁までです。

03

置換内容を確認する

自動生成は編集後350msで実行します。オフではボタンかCtrl/Cmd+Enterを使います。変更中は出力操作が無効です。サンプルと消去は文字数つきプレビューで確認し、適用後は一度戻せます。

生成される型と補助コード

一つのファイルにまとめる

JSONからSwiftはvarプロパティとCodable構造体を出力します。空でない子オブジェクトには補助構造体、空のオブジェクトには辞書、混在した値には再帰的なJSONValueを使います。

数字の字句を直接読む

整数表記の値がすべて符号付き64ビット内ならInt64です。小数、指数、大きな整数が含まれる数値群はFoundation.Decimalになります。JavaScriptのNumberを途中に挟みません。

Optionalの合成動作

欠落またはnullが観測されたプロパティだけをOptionalにする設定と、全項目をOptionalにする設定があります。合成Codableでは欠落もnullもnilになり、エンコード時は通常その項目が省略されます。

デコーダーも一緒に生成

makeJSONDecoder()は既定のキー戦略を使用します。Dateがあれば小数秒あり・なしのISO8601DateFormatterを試します。ISO文字列へ再出力する場合はJSONEncoder側の日時戦略を別に指定します。

実装前に確認する制約

モデルの推論に限定
JSON Schema、OpenAPI、列挙型の推測、class、Core Data、SwiftData、通信コードは生成しません。未知のキーは合成デコードで無視されます。推論時の日付検査は、出力ヘルパーが業務バリデーターであることを意味しません。
保守的な数値上限
先頭と末尾のゼロを除いて有効数字38桁まで。元の指数は−128〜127、指数から小数桁数を引いた値は−128以上、正規化した桁の次数は127以下です。混在値にも適用し、ゼロも元の表記を検査します。
対象OSで再検証
Swift6.3.1とmacOS26でコンパイルと数値の往復を確認し、Swift5言語モードでも検査しています。古いコンパイラーを試した意味ではありません。旧FoundationはDecimalの精度が異なるため、配布先で確認してください。1.0と1e0の表記差は残りません。
Dateは時点を表す
有効な暦日・時刻・タイムゾーンと最大三桁の小数秒が必要です。同じ位置の非null文字列すべてが条件を満たしたときだけDateにします。日付のみ、時区なし、不正な日付、高精度文字列はStringのままです。元の時区や表記は失われます。 年は1583〜9999に限定し、それ以前は歴史的な暦のずれを避けてStringにします。生成ヘルパーも1583年より前を拒否します。
キーの区別を守る
CodingKeysを切った場合、改名が必要なキーはエラーです。予約語、衝突、CodingKeysというプロパティ名は安全に改名します。孤立サロゲートは値でもキーでも拒否し、同一オブジェクトや統合モデルでNFC等価になる異なるキーも拒否します。
厳密な入力と規模制限
コメント、末尾カンマ、重複キー、修復、ファイル取込、URL取得、ブラウザーでのSwift実行はありません。入力500,000文字、50,000ノード、深さ40、統合オブジェクト100項目、200構造体、キー・数値1,000文字、出力1,000,000文字が上限です。

JSONからSwiftのよくある質問

このページで生成コードをコンパイルしますか?

このページはソースを生成するだけです。JSONからSwiftの開発時には実際にSwiftでコンパイルしましたが、ユーザーのブラウザーではSwiftを実行しません。ダウンロード後に対象プロジェクトで確認してください。

存在しないフィールドとnullはどう扱われますか?

どちらもOptionalとして推論され、合成デコードではnilになります。エンコードでは通常そのプロパティが消えます。欠落・null・値の三状態が必要なら独自のCodable処理を追加してください。

無効な識別子はどう変換されますか?

camelCaseまたは合法な原名を維持する方式で名前を整えます。記号や予約語、衝突は改名し、CodingKeysで元キーへ対応させます。対応を切って改名が必要になる入力は拒否します。

ネストしたJSONには別の構造体が作られますか?

はい。空でない子オブジェクトは別の構造体になり、配列は全要素を統合します。空オブジェクトは辞書、混在値はCodableに適合する再帰的なJSONValueになります。

小数秒のあるISO 8601文字列をデコードするには?

ISO推論では小数秒を三桁まで認識し、生成するmakeJSONDecoder()が小数秒あり・なしを順に試します。より細かい日時はStringに留めます。Dateから再エンコードする形式は別に設定してください。

推定結果に改善点がありますか?

欠落のある応答も試す

JSONからSwiftに実際の応答を組み合わせ、エクスポートしたモデルを配布対象の環境で読み込んで確かめましょう。