Tool Kumarのツール
JSONをSwiftのモデルに変換
Codableに準拠したSwiftの構造体を生成します。プロパティ名がJSONと異なる場合はCodingKeysを追加するため、user-idのようなキーもuserIdにデコードされます。
このツールの使い方
- フィールドが異なるレコードも含めて、代表的なレスポンスを貼り付けます。
- 生成された出力を確認し、必要に応じてルート名を変更します。
- コードをコピーまたはダウンロードし、型がAPI仕様と合っているか確認します。
実行例
この出力は組み込みの変換機能で生成したものです。2つのitemのpriceからは浮動小数点数のフィールドが、nullと文字列のnoteからはnull許容のフィールドが推論されます。
入力
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}出力
import Foundation
struct Root: Codable {
let userId: Int
let profile: Profile
let items: [Item]
enum CodingKeys: String, CodingKey {
case userId = "user-id"
case profile, items
}
}
struct Profile: Codable {
let city: String
let createdAt: String
enum CodingKeys: String, CodingKey {
case city
case createdAt = "created_at"
}
}
struct Item: Codable {
let price: Double
let note: String?
}
JSONDecoderでデコードする
生成されたRoot構造体をJSONDecoderで使います。Codableなので、同じモデルをJSONEncoderでエンコードすることもできます。
この出力では、キー戦略はデフォルトのままにしてください。CodingKeysには、created_atを含む元のJSONキーがすでに入っています。
let model = try JSONDecoder().decode(Root.self, from: responseData)
let encoded = try JSONEncoder().encode(model)オプションと注意点
- 整数はInt、小数はDouble、符号付き64ビットの範囲を超える整数はDecimalと推論されます。対象プラットフォームの制限と10進数の精度を確認してください。
- nullや存在しないフィールドは、オプショナルなプロパティになります。nullのみ、または型が混在する場合は、必要に応じて生成されるJSONValueヘルパーを使います。
- JSONValueは数値をDoubleとして保持するため、正確な金額や非常に大きなIDには明示的な型を使ってください。
- 日付の文字列はStringのままです。フィールドをDateに変更する場合は、APIの形式に合わせてJSONDecoder.dateDecodingStrategyを設定してください。
標準でプライバシーを保護
ドキュメントはこのブラウザー内に残ります。Tool Kumarは、解析、変換、ダウンロードファイルの作成を端末内で行います。アカウント登録やアップロードの手順はありません。
JSONをSwiftのモデルに変換のよくある質問
- クラスと構造体のどちらを生成しますか?
- Codableに準拠した構造体を、letプロパティとネストしたモデル型付きで生成します。Foundationをインポートします。
- CodingKeysはいつ追加されますか?
- プロパティ名が変わる場合に、Swiftの識別子を元のJSONキーに対応付けるCodingKeysのenumを出力します。
- nullはどう扱われますか?
- nullが見られたフィールドや存在しないフィールドは、オプショナルなプロパティになります。不明な値や型が混在する値にはCodableなJSONValueのenumを使い、これは参照される場合にだけ追加されます。
- JSONDecoderでそのまま使えますか?
- はい。生成された構造体をプロジェクトにコピーし、DataからRoot.selfをデコードします。事前に、オプショナルなフィールドと日付の型を確認してください。