logo
GeekFormat

JSON から Swift

無料オンラインJSONからSwiftツール。APIレスポンス、設定ファイル、ログJSONをワンクリックで純粋なSwift struct/class型宣言に変換します。登録不要、アップロード不要、ブラウザローカルでリアルタイム生成。iOS、macOS、watchOS、tvOSプロジェクトの迅速なモデリングに最適です。

関連おすすめ

JSONからSwiftについて:JSONデータをAppleエコシステムのネイティブ型に変換

JSONからSwiftは、JSON形式のデータ(オブジェクトまたは配列)をSwift struct/class型宣言に自動変換するプロセスです。JSONはREST API、設定ファイル、トラッキングログの事実上の標準であり、SwiftはiOS、macOS、watchOS、tvOSアプリの主要な開発言語であり、Vaporなどのサーバーサイドフレームワークのコア言語でもあります。開発ではAPIが返すJSONを対応するSwift型として記述する必要が頻繁にありますが、手書きは時間がかかるだけでなくオプショナルフィールドの見落としも発生しやすいため、このツールはこのプロセスを自動化します。

このツールはquicktype-coreを使用してブラウザローカルで変換を完了します。quicktypeは多言語をサポートする構造体ジェネレーターで、このツールはSwift向けにjust-typesとno-commentsオプションを有効にしているため、クリーンなstruct/classプロパティ宣言が出力され、Codable、Decodable、Encodableなどのシリアライゼーション注釈は含まれず、import文やファイルヘッダーコメントも含まれません。この「裸の型」により、開発者はプロジェクトの必要に応じて自由にプロトコルを追加したり、アクセス制御を調整したり、Alamofire/Moyaなどのネットワークフレームワークが好む命名規則に変更したりできます。

Swiftの型システムは安全性で知られています。structは値型で、不変データの表現に適しています;classは参照型で、状態の共有や継承が必要なシナリオに適しています。このツールが生成するプロパティは可能な限りSwiftのString、Int、Double、Bool、[T]、カスタム型などにマッピングされます。開発者は生成後、ビジネスニーズに応じて一部のフィールドをOptional(?)に変更したり、型にCodableプロトコルを追加したり、struct全体をclassにアップグレードして参照セマンティクスを取得したりできます。

ネストオブジェクトの処理はツールの重要な機能です。JSONにネストオブジェクトが含まれる場合、ツールは再帰的に独立したサブタイプを生成します。例えばRootにaddressオブジェクトが含まれる場合、Address型が生成され、メイン型でvar address: Addressにより参照されます。これにより型の重複定義が回避され、Xcodeのオートコンプリートと型チェックが階層関係を正しく追跡できるようになります。命名規則はフィールド名の先頭を大文字にし、例えばusers配列の要素はUserと命名されます。

配列型の推論は「最初の要素で推論」戦略に従います。配列要素が文字列の場合は[String]、整数の場合は[Int]、浮動小数点数の場合は[Double]、オブジェクトの場合は[カスタム型]を生成します。空配列[]はサンプルが不足しているため[Any]またはフォールバック型を生成し、実際のビジネスに応じて具体的な型に変更することを推奨します。特に大きな配列やスパース配列の場合は、ソースJSONに実際のサンプル要素を配置して推論精度を高めることを推奨します。

純粋なフロントエンド処理はこのツールのコアなアーキテクチャ上の利点です。すべてのJSON解析とSwiftコード生成はブラウザのJavaScript(Web Worker内のquicktype-coreを含む)で実行され、バックエンドサービスに依存せず、いかなるサーバーにもデータを送信しません。この設計により機密情報を含む可能性のあるJSONデータが保護されるだけでなく、変換速度がローカルデバイスのパフォーマンスにのみ制限され、ネットワーク往復を待つ必要がありません。APIキーや未公開ビジネスフィールドを含むJSONの処理に特に重要です。

このツールはCodable/CodingKeys/Dateデコード戦略を強制的にバインドする一部のオンラインツールとは異なります:チームメンバーはプロトコル、命名、アクセス制御について異なる選好を持つことが多く、このツールは最小出力原則を堅持し、プロトコルと戦略の選択は開発者がプロジェクトの必要に応じて加工するために残しています。この「半製品を生成 + プロジェクトレベルで二次加工」ワークフローは、中規模・大規模チームでは通常「ワンクリックで全部入り」よりもエンジニアに好まれます。

ユースケース

  • iOS開発:バックエンドREST APIが返すJSONをSwift structに変換し、SwiftUIまたはUIKitネットワーク層のモデリングとJSONDecoderデコードに使用
  • macOS開発:アプリ設定JSONをSwift型に変換し、AppKitプロジェクトで型安全な設定読み取りを行い、スペルミスを回避
  • watchOS開発:Apple Watchアプリの健康・運動データJSONをSwiftモデルに変換し、SwiftUIとHealthKitに接続
  • tvOS開発:コンテンツレコメンドインターフェースJSONをSwift型に変換し、テレビアプリのホームページデータ表示とフォーカスナビゲーションに使用
  • SwiftUI MVVMモデリング:APIデータモデルを@Publishedプロパティとして直接ViewModelにバインドし、画面ビューを駆動
  • Combineリアクティブデータフロー:JSONレスポンス型をPublisherの出力型として使用し、JSONDecoderと組み合わせてリアクティブ解析を行う
  • SwiftData/Core Data事前モデリング:先にSwift structを生成し、手動で@Modelまたは@NSManaged注釈を追加してエンティティマッピング
  • サードパーティSDK連携:SDKドキュメントのJSONレスポンス例をSwift型に変換し、ログイン、決済、プッシュ、地図などのSDKに迅速に接続
  • 単体テスト準備:インターフェースのモックJSONをSwift型に変換し、XCTestテストデータとアサーションに使用してテストの保守性を向上
  • コードレビュー:APIが返すJSONをSwift型に変換し、チームのCode Review時にフィールド命名とオプショナル性について議論しやすくする
  • Flutter/React Nativeハイブリッド開発:ネイティブSwiftモジュール呼び出し用のデータモデルを準備し、bridge層の型変換エラーを削減
  • バックエンドインターフェース移行:RESTインターフェースドキュメントまたはPostmanサンプルJSONからSwiftクライアントモデルを生成し、バージョンアップ時に迅速に同期
  • 教育研修:Swift/iOSコースでJSONから型システムへのマッピングをデモンストレーションし、学生がAPIデータモデリングと型安全を理解するのを支援
  • 健康・フィットネスアプリ:HealthKit/Fitbitなどのインターフェースが返すJSONをSwift型に変換し、Apple Healthデータモデリングに使用
  • 決済・金融アプリ:決済ゲートウェイのインターフェースレスポンスJSONをSwiftモデルに変換し、照合と例外処理を容易に
  • ECオーダーシステム:注文、商品、住所などのJSONをSwift structに変換し、SwiftUIリストと詳細ページの表示に使用
  • ニュース・コンテンツアプリ:コンテンツ管理システムのJSONレスポンスをSwift型に変換し、TableView/SwiftUIリスト/詳細ページに使用
  • Vaporサーバーサイド開発:バックエンドAPIのリクエスト/レスポンスJSONをSwift構造体に変換し、サーバーサイドモデル定義とCodableエンコード/デコードに使用
  • MapKitと地理データ:地図インターフェースが返すJSONをSwift structに変換し、場所検索、ルート計画、ジオコーディング結果のモデリングに使用

使い方

  1. 左側のエディタにJSONコンテンツを貼り付けるか、アップロードボタンをクリックして.json/.txtファイルを選択、または内蔵サンプルデータをロード
  2. ツールは400msのデバウンス後にquicktype-coreを自動的に呼び出して変換し、右側に生成されたSwift struct/classコードを表示
  3. JSONフォーマットエラーがある場合は、「JSONを修復」ボタンをクリックして一般的な構文問題(末尾のカンマ、単一引用符、引用符の欠落など)を自動修復
  4. 生成結果を確認し、プロジェクトの必要に応じてCodable/Equatable/Identifiableなどのプロトコルを手動で追加;「コピー」をクリックしてXcodeに貼り付けるか、「ダウンロード」をクリックして.swiftファイルとして保存

特徴

  • 純粋なブラウザローカル変換:JSON解析とSwiftコード生成はすべてブラウザ内でquicktype-coreにより実行され、元のJSONと生成コードはサーバーにアップロードされません
  • quicktype-core just-typesモード:クリーンなSwift struct/classプロパティ宣言を出力。importなし、Codable/CodingKeysなどの注釈なしで、プロジェクトの必要に応じて加工が容易
  • 400msデバウンス自動変換:JSONを貼り付けまたは変更すると、ほぼリアルタイムでSwift型を生成。変換ボタンを繰り返しクリックする必要がなく、変換プロセスは完全に非同期でUIをブロックしません
  • Web Workerバックグラウンド実行:quicktype-coreはブラウザのWeb Workerで実行され、大きなJSONの変換時にメインスレッドのフリーズや編集のカクつきを回避
  • インテリジェント型推論:String、Int、Double、Bool、[T]、カスタム型を自動マッピング。配列は最初の要素の型で推論し、フィールド型を手書きする必要なし
  • ネストオブジェクトの自動展開:再帰的に各ネストオブジェクトに独立したSwift型を生成し、フィールド名の先頭を大文字にして命名、型の重複定義を回避
  • 配列型の自動推論:JSON配列は自動的に[String]/[Int]/[Double]/[カスタム型]に変換。空配列はデフォルトで[Any]を生成
  • ワンクリックJSONエラー修復:末尾のカンマ、単一引用符、引用符の欠落、コメントなどの一般的なフォーマットエラーをワンクリックで自動修復して変換を続行
  • ワンクリックコピー + .swiftダウンロード:生成されたSwiftコードをワンクリックでクリップボードにコピー、または.swiftファイルとしてダウンロードしてXcodeプロジェクトに直接ドラッグ
  • サンプルデータ + ファイルアップロード:SwiftスタイルのサンプルJSON(ネストされたaddress/company/tagsを含む)を内蔵。.json/.txtファイルのドラッグ&ドロップまたはクリックアップロードをサポート
  • localStorage入力履歴:最近の入力を自動保存。ページをリフレッシュしたり誤って閉じたりしても迅速に復元して編集を続行可能、コンテンツの損失を心配不要
  • レスポンシブ分割画面エディタ:左右分割画面でリアルタイムプレビュー。デスクトップとモバイルに自動適応、小画面でもスムーズに操作

コード例

Swift:URLSession + JSONDecoderによる生成structのパース

swift

iOS/macOSプロジェクトで最も一般的な使用法:本ツールが生成したstructにCodableを追加した後、URLSessionで非同期に取得しJSONDecoderでデコードします。

import Foundation

// 1) 本ツールが生成したルート型(Codableプロトコルを補足)
struct User: Codable {
    let id: Int
    let name: String
    let email: String
    let isActive: Bool
    let tags: [String]
}

// 2) URLSessionで非同期取得してデコード
func fetchUser(id: Int) async throws -> User {
    let url = URL(string: "https://api.example.com/users/\(id)")!
    let (data, response) = try await URLSession.shared.data(from: url)
    guard
        let http = response as? HTTPURLResponse,
        (200..<300).contains(http.statusCode)
    else {
        throw URLError(.badServerResponse)
    }
    return try JSONDecoder().decode(User.self, from: data)
}

// 3) 使用例(Swift 5.5+ async/await)
Task {
    do {
        let user = try await fetchUser(id: 42)
        print("User: \(user.name), tags: \(user.tags)")
    } catch {
        print("Failed to decode:", error)
    }
}

Swift:Alamofire responseDecodableによる生成型のデシリアライズ

swift

Alamofireを使用する場合、responseDecodableを直接使用して本ツールが生成したstructをSwiftオブジェクトに自動的にデコードできます。

import Foundation
import Alamofire

// 本ツールが生成した型、Codableを追加すると直接使用可能
struct Product: Codable {
    let id: Int
    let title: String
    let price: Double
    let inStock: Bool
    let images: [String]
}

final class ProductService {
    private let session: Session

    init(session: Session = .default) {
        self.session = session
    }

    /// Alamofire 5 async/awaitスタイルのresponseDecodable
    func loadProduct(id: Int) async throws -> Product {
        let url = "https://api.example.com/products/\(id)"
        return try await withCheckedThrowingContinuation { continuation in
            session.request(url)
                .validate(statusCode: 200..<300)
                .responseDecodable(of: Product.self) { response in
                    switch response.result {
                    case .success(let product):
                        continuation.resume(returning: product)
                    case .failure(let error):
                        continuation.resume(throwing: error)
                    }
                }
        }
    }
}

// Moyaスタイルの呼び出し例
// provider.request(.product(id: 1)).map(Product.self)
// let product: Product = try await provider.request(.product(id: 1)).map(Product.self)

Swift:Combine + JSONDecoderによるリアクティブパース

swift

SwiftUI/Combineプロジェクトでは、生成したstructをdataTaskPublisher/decodeと一緒に使用してリアクティブデータフローを構築できます。

import Foundation
import Combine

// 本ツールが生成したルート型
struct Article: Codable, Identifiable {
    let id: Int
    let title: String
    let body: String
    let publishedAt: Date
}

final class ArticleRepository {
    private let session: URLSession
    private var cancellables = Set<AnyCancellable>()

    init(session: URLSession = .shared) {
        self.session = session
    }

    /// Combineでデータストリームを公開
    func articlePublisher(id: Int) -> AnyPublisher<Article, Error> {
        let url = URL(string: "https://api.example.com/articles/\(id)")!
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .iso8601

        return session.dataTaskPublisher(for: url)
            .map(\.data)
            .decode(type: Article.self, decoder: decoder)
            .receive(on: DispatchQueue.main)
            .eraseToAnyPublisher()
    }

    /// SwiftUI ViewModelで購読
    func bind(to viewModel: ArticleViewModel, articleId: Int) {
        articlePublisher(id: articleId)
            .sink(
                receiveCompletion: { completion in
                    if case .failure(let err) = completion {
                        viewModel.errorMessage = err.localizedDescription
                    }
                },
                receiveValue: { article in
                    viewModel.article = article
                }
            )
            .store(in: &cancellables)
    }
}

final class ArticleViewModel: ObservableObject {
    @Published var article: Article?
    @Published var errorMessage: String?
}

Best Practices

よくある質問

JSONをSwift構造体に変換するには?

JSONコンテンツを左側の入力ボックスに貼り付けると、ツールは400msのデバウンス後にquicktype-coreを呼び出してSwiftコードに自動変換し、右側のパネルにリアルタイムで結果を表示します。アップロードボタンをクリックして.json/.txtファイルを選択するか、サンプルボタンをクリックして内蔵データをロードすることもできます。変換完了後、ワンクリックでコピーまたは.swiftファイルとしてダウンロードできます。

生成されるSwiftコードにはCodableが含まれますか?

デフォルトでは含まれません。このツールはquicktype-coreのjust-typesモードを使用しており、純粋なstruct/classプロパティ宣言を出力します。Codable、Decodable、Encodableの注釈はなく、import文も含まれません。Codableが必要な場合は、生成後に手動で: Codableを追加するだけです(例:struct User: Codable {})。または独自にJSONDecoder解析ロジックを記述してください。

どのようなJSONデータ構造をサポートしていますか?

すべての有効なJSONをサポート:基本型(null、boolean、number、string)、1次元または多次元配列、任意の深さのネストオブジェクト。ルート入力はJSONオブジェクトまたはJSON配列のいずれかで、オブジェクト優先、配列は最初の要素で推論する方法で処理します。サポートされていない入力には、JavaScript特殊値(関数、Symbol、undefined)および非JSONテキストが含まれます。

ネストされたJSONオブジェクトはどのように処理されますか?

ツールは再帰的に各ネストオブジェクトに独立したSwift型を生成します。命名規則は親型名とフィールド名の組み合わせに基づきます。例えばRootにaddressフィールドが含まれる場合、Addressサブタイプが生成され、メイン型でvar address: Addressにより参照されます。これにより型の重複定義が回避され、Xcodeのオートコンプリートと型チェックが階層関係を正しく追跡できるようになります。

配列フィールドはSwift配列に変換されますか?

はい。JSON配列は自動的にSwift [T]形式に変換されます。配列要素が文字列の場合は[String]、整数の場合は[Int]、浮動小数点数の場合は[Double]、オブジェクトの場合は[カスタム型]を生成します。空配列[]はサンプル要素がないため、デフォルトで[Any]を生成します。生成後に手動で[String]や[Int]などの具体的な型に変更することを推奨します。

null値フィールドにはどのような型が生成されますか?

JSONのnull値からは具体的な型を推論できないため、ツールはAnyまたはフォールバック型を生成する可能性があります。ソースJSONのnull値フィールドをサンプル値(例:"field": "" はStringと推論)に置き換えるか、ビジネスに応じて手動でOptional(例:var phone: String?)に変更することを推奨します。これによりSwift型システムの安全なセマンティクスにより適合します。

生成される構造体の名前をカスタマイズできますか?

はい。ツールバーの型名ボタン(または設定エントリ)をクリックすると、ルート型名(デフォルトはRootまたはサンプルデータから推論)を変更できます。サブタイプの命名はルート名とフィールド名に基づいて自動生成され、命名規則はフィールド名の先頭を大文字にします。例:users → User、tags → Tag。

JSONフォーマットエラーが発生した場合は?

ツールはJSONの合法性を自動的に検出し、エラー時には右側に具体的なエラーメッセージを表示し、「JSONを修復」ボタンを提供します。クリックすると一般的なエラーを自動修復:末尾の余分なカンマ、単一引用符から二重引用符への置換、引用符が欠落したkeyの補完、コメントの削除など。修復が成功するとJSONを手動で修正することなく変換を続行できます。

データはサーバーにアップロードされますか?プライバシーは安全ですか?

完全にローカルブラウザで実行されます。すべてのJSON解析、Swiftコード生成はブラウザのJavaScript(Web Worker内のquicktype-coreを含む)でローカルに完了し、入力されたJSONデータと生成されたSwiftコードはいかなるサーバーにもアップロードされず、クラウドに記録またはキャッシュされることもありません。API key、token、ユーザープライバシーフィールド、未公開ビジネス構造などの機密JSONも安心して使用でき、ページを閉じると消去されます。

生成されたコードはXcodeプロジェクトで直接使用できますか?

はい。生成されるコードは標準Swift構文で、Xcodeの.swiftファイルに直接コピーするか、「ダウンロード」ボタンで.swiftファイルとして保存してプロジェクトにドラッグできます。純粋な型宣言が出力されるため、プロジェクトの必要に応じてCodable、Equatable、Identifiableなどのプロトコルを手動で追加するか、アクセス制御修飾子(public/internal/private)を調整することを推奨します。

ルート入力としてJSON配列をサポートしていますか?

サポートしています。ルート入力がJSON配列の場合、ツールは配列の最初の要素をテンプレートとして要素型を生成し、その要素型定義を出力します。例えば[{"id":1,"name":"A"}]はItemという名前のstruct(またはフィールドから推論された名前)を生成し、そのフィールドは最初の要素のフィールドになります。メイン型はproperty items: [Item]で参照し、配列を直接ルート型として扱うことを回避します。

大きなJSONを変換するとカクつきますか?

ツールには明示的なサイズ制限はありませんが、ブラウザによる超大きなJSONの解析とレンダリングは遅くなります。推奨事項:① 1つのビジネスモジュールのJSONのみを一度に変換する、② ネスト階層が深すぎる場合は階層を分割して処理する、③ 数MBを超えるJSONはコマンドライン版のquicktypeを使用する、④ 同じJSONを複数のサブモジュールに分割してそれぞれ変換するとメモリ使用量が大幅に削減される。

JSONからTypeScriptへの変換と互換的に使用できますか?

どちらもJSONを対応する言語の型定義に変換しますが、重点が異なります:JSONからSwiftはstruct/classプロパティ宣言を生成し、iOS/macOSネイティブアプリに使用;JSONからTypeScriptはinterface/type宣言を生成し、フロントエンドの型チェックに使用します。プロジェクトにiOSクライアントとWebフロントエンドの両方がある場合は、同じJSONに対してSwiftとTSの2つのバージョンをそれぞれ生成し、両端の型の一貫性を保証することを推奨します。

生成されたコードにCodableプロトコルを追加するには?

このツールはデフォルトで純粋な型を出力し、プロトコルは直接付属しません。生成後、struct/class宣言の後に: Codableを追加するだけです。例:struct User: Codable {}。これでJSONDecoderが使用できるようになります。デフォルトでCodableを付けたい場合は、quicktype-coreをフォークしてSwiftレンダラーを変更するか、生成後にXcodeの一括置換機能を使用してすべての型にプロトコルを追加できます。

ネットワーク接続は必要ですか?モバイルでも使用できますか?

ページに初めてアクセスするときは、ツールスクリプトとquicktype-coreリソースを取得するためにネットワーク接続が必要です。その後はブラウザキャッシュでオフライン実行できます(アクセスしたことのあるブラウザで)。モバイルブラウザ(iOS Safari、Android Chrome)でも正常に使用でき、インターフェースはレスポンシブ分割画面デザインで、縦向きでは自動的に上下スタッキングに切り替わります。

生成後、他の型を壊さずに特定の型を個別に変更できますか?

サポートしています。生成後、各Swift型は独立したstruct/classであり、ツールの出力は純粋なテキストです。特定の型だけを個別にコピーしてXcodeに貼り付けたり、XcodeでRenameリファクタリングを使用して型とフィールドを一括変更しても他の型に影響を与えません。型のセット全体を再生成する必要がある場合は、ページをリフレッシュしてから再度JSONを貼り付けてください。

Swift enumの推論をサポートしていますか?

quicktypeによるunion/列挙型のサポートには、追加のtype hintsまたはGraphQL/JSON Schema入力が必要です。JSONサンプルのみに基づいて列挙型を推論することは困難であるため、このツールはデフォルトでenumを生成しません。列挙型が必要な場合は、対応するstructを手動でenum + Codableに変更するか、JSONからKotlin/TypeScriptツールを使用して先にenum型を取得してからSwiftに手動で移行できます。

トラブルシューティング

「JSONデータを入力してください」と表示される、または右側が空

左側の入力ボックスが空であるか、空白文字のみが含まれています。有効なJSONコンテンツを貼り付けるか、「サンプル」をクリックしてサンプルをロードするか、「アップロード」をクリックして.json/.txtファイルを選択してください。

「Unexpected token ... in JSON」と表示される

JSON形式が無効です。一般的な原因:①末尾に余分なカンマがある(例:{"a":1,});②二重引用符ではなく単一引用符を使用している;③JSオブジェクト記法(例:{key: value})でJSONではない(例:{"key": "value"});④JavaScriptコメントが含まれている。「JSONを修復」ボタンをクリックすると一部の一般的なエラーを自動修復できます。

生成された型にCodableがなく、JSONDecoderを直接使用できない

これは意図された動作です。本ツールはjust-typesモードを使用しており、純粋なstruct/classプロパティ宣言を出力します。Codableが必要な場合は、生成後に型に: Codableを追加してください(例:struct User: Codable {})。またはextension User: Codable {}を記述してからJSONDecoderを呼び出してください。

空配列[]から[Any]が生成された

空配列にはサンプル要素がないため、ツールはフォールバック型[Any]を生成します。ソースJSONに少なくとも1つのサンプル要素(例:[1, 2])を配置し、生成後にサンプル値を削除して具体的な型を手動で指定するか、生成後に直接[String]/[User]などのより正確な型に変更することを推奨します。

null値フィールドの型が不確定

JSON nullからは具体的な型を推論できないため、ツールはAnyまたはフォールバック型を生成する可能性があります。ソースJSONのnullを代表的なサンプル値(""または0など)に置き換え、生成後にそのフィールドをOptional(?)または具体的な型に変更することを推奨します。例:var phone: String?。

生成された型名がプロジェクトの規約に合わない

ツールバーでルート型名を変更できます。サブタイプ名はルート名+フィールド名に基づいて自動生成されます。それでも満足できない場合は、生成後にXcodeでRenameリファクタリングを使用して一括変更してください(右クリック→Refactor→Rename)。Xcodeはすべての参照を同期して更新します。

大きなJSONを変換した後、ページがカクつく

ブラウザが超大きなJSONをレンダリングして多数の型を生成すると遅くなります。JSONを複数の独立したビジネスモジュールに分割してそれぞれ変換するか、モデリングが必要な主要なオブジェクトのみを抽出して変換することを推奨します;10MBを超えるJSONはコマンドライン版のquicktypeを使用することを推奨します。

Xcodeコンパイルエラー「Type 'X' does not conform to protocol 'Decodable'」

一部のフィールドにCodableを追加した後、Optional/Date/Enumなどの型を正しく処理していないことを示しています。一般的な修正:①nullになる可能性のあるすべてのフィールドをOptional<T>に変更、②カスタム日付戦略JSONDecoder().dateDecodingStrategy = .iso8601、③カスタムCodingKeysでJSON keyとSwiftプロパティ名を一致させる。

フィールド名がsnake_case、Swiftの慣習はcamelCase

本ツールはデフォルトでJSONの元のフィールド名を保持するため、snake_caseフィールドはそのまま生成されます。camelCaseに統一したい場合は、生成後にXcode Renameで一括リネームするか、カスタムquicktypeレンダラーでフィールド名をcamelCaseに変換してからCodingKeysマッピングを補足し、JSONデコードが正しいことを確認してください。

ダウンロードした.swiftファイルをXcodeで開くと中国語keyでエラーが発生する

Swiftはフィールド名を英語ASCII識別子にすることを推奨しています。ソースJSONに中国語key(例:{"姓名": "Alice"})が含まれる場合、生成されるvar 姓名: Stringは一部の古いバージョンでSwiftコンパイラがエラーを報告する可能性があります。ソースJSONのkeyを英語(nameなど)に変更することを推奨します。これはSwiftコーディング規約により適合しています。

型がvarのみで、let/private制御がない

本ツールはデフォルトでvar publicプロパティを生成し、生成後の加工を容易にしています。letまたはアクセス制御(private(set)など)が必要な場合は、XcodeでRefactor→Add Access Controlを使用して一括変更するか、生成後にsed/テキスト編集ツールでvarをletに置換できます。

JSONにISO 8601日付文字列が含まれているが、Dateフィールドのデコードに失敗する

本ツールはデフォルトでISO 8601文字列をStringにマッピングし、Swiftは自動的にDateに変換しません。JSONDecoderでdateDecodingStrategyを設定する必要があります。例:JSONDecoder().dateDecodingStrategy = .iso8601。日付形式が非標準の場合は、DateFormatterまたはカスタムパースロジックを手動で実装する必要があります。

ネスト階層が深すぎて名前が衝突する

ツールは「フィールド名の先頭を大文字」をサブタイプの命名規則としています。深くネストされたJSONでは同名のネストオブジェクトが存在して型の衝突が発生する可能性があります。解決方法:①ソースJSONのフィールドにビジネスプレフィックスを追加、②ルートJSONを複数の独立したモジュールに分割してそれぞれ生成、③生成後にXcode Renameで衝突する型名を一括変更。

public structが生成されるがプロジェクトはmoduleで分離している

本ツールはデフォルトでinternal structを生成し、明示的なpublic修飾子はありません。プロジェクトがmoduleごとに分割されていてクロスモジュールアクセスが必要な場合は、Xcodeでstructをpublic structに一括置換するか、生成後にsed/awkスクリプトでpublicキーワードを一括追加する必要があります。

用語集

struct
Swiftの値型。デフォルトで不変データモデルの表現に適しており、代入時にコピーされます。本ツールはデフォルトでJSONオブジェクトを表すためにstructを生成します。
class
Swiftの参照型。状態の共有、継承、またはアイデンティティ(===)が必要なシナリオに適しています。本ツールは一部の設定でclassを生成できます。
Optional(?)
Swiftで値がnilになる可能性があることを示す型修飾子。例:var name: String?。本ツールが生成するフィールドはデフォルトで非Optionalであり、JSONフィールドが欠落する可能性があるかどうかに応じて生成後に手動で?を追加できます。
Array([T])
Swiftの配列型の短縮表記。本ツールはJSON配列を[T]に変換し、Tは配列要素の型から推論されます。例:[String]、[Int]または[カスタム型]。
Codable
SwiftにおけるDecodableとEncodableのプロトコル合成。Codableを実装すると、JSONDecoderを使用してJSONデータを型インスタンスにパースできます。本ツールはデフォルトでCodableを生成せず、手動で追加する必要があります。
JSONDecoder
FoundationフレームワークのJSONパーサー。Codableプロトコルと組み合わせて使用し、DataをSwift型インスタンスに変換できます。本ツールが純粋な型を出力した後、開発者は自身でJSONDecoderを使用してパースできます。
URLSession
AppleプラットフォームFoundationフレームワークのネットワークリクエストAPI。一般的な使用法はURLSession.shared.data(from: url)で、JSONDecoderと組み合わせてインターフェース連携を完了します。
Alamofire
Swiftコミュニティで最も人気のあるサードパーティHTTPネットワークライブラリ。URLSessionをベースにラップされており、responseDecodableをサポートしてSwift型に直接デシリアライズします。
Moya
Swiftネットワーク抽象化レイヤーで、通常Alamofireと組み合わせて使用されます。MoyaをCodable型と組み合わせると、API呼び出しのボイラープレートコードを大幅に削減できます。
Vapor
Swiftの主流なサーバーサイドフレームワークで、macOS/Linux上でSwiftを使用してWebアプリケーションを構築します。本ツールが生成するSwift構造体はVaporのルーティングモデルにも使用できます。
quicktype
多言語をサポートする型ジェネレーターのオープンソースツール。本ツールはquicktype-coreを介してブラウザWeb Worker内でJSONからSwiftへの変換を完了します。
Property
Swift型のプロパティ宣言。本ツールはJSONの各keyをSwiftプロパティにマッピングします。例:"name": "Alice" はvar name: Stringにマッピングされます。
Type Inference
JSON値のリテラル形式に基づいてSwift型を自動的に推論するプロセス。本ツールはnull、boolean、number、string、array、objectに基づいてマッピングを行います。
localStorage
ブラウザのローカルキーバリューストア。本ツールはlocalStorageを使用して最近の入力履歴を保存し、ページをリフレッシュしたり誤って閉じたりした後に復元できるようにします。
Web Worker
ブラウザが提供するバックグラウンドスレッドメカニズム。本ツールはWeb Workerを介してquicktype-coreをロードおよび実行し、大きなJSONの変換がメインスレッドをブロックすることを回避します。
SwiftUI
Appleが発表した宣言的UIフレームワーク。本ツールが生成するSwift型はSwiftUIビューのデータモデルとして使用でき、@State/@ObservedObjectと組み合わせてUIを駆動します。
Combine
Appleのリアクティブプログラミングフレームワーク。生成されたSwift型をJSONDecoderと組み合わせると、dataTaskPublisherリアクティブデータフローを構築できます。
SwiftData
Appleが2023年に発表したデータ永続化フレームワーク。本ツールが生成する型はSwiftDataモデルの基底クラスとして使用でき、@Modelを追加するとSwiftDataによって管理されるようになります。
Value Type / Reference Type
Swiftではstructは値型、classは参照型です。本ツールはデフォルトでstructを生成し、代入時にコピーされます;参照セマンティクスが必要な場合は手動でclassに変更できます。
Field Naming
本ツールはデフォルトでJSONの元のフィールド名を保持します。ソースJSONがsnake_caseでプロジェクトがcamelCaseを要求する場合は、手動でリネームするかカスタムquicktypeレンダラーが必要です。
ISO 8601 日付
一般的なJSON日付形式。例:2026-07-14T10:00:00Z。Date型に正しくパースするにはJSONDecoder.dateDecodingStrategy = .iso8601を配套する必要があります。

JSON型からSwift型へのマッピング早見表

ツールはJSON値の形式に基づいて対応するSwift型を自動的に推論します:

JSON値の例判定方法生成されるSwift型説明
nullvalue === nullAny? または具体的なOptional具体的な型を推論できないため、生成後に手動でOptional<T>に変更することを推奨
true / falsetypeof value === 'boolean'BoolSwiftブール型に直接マッピング
42typeof value === 'number' && Number.isInteger(value)Int整数はIntにマッピング(32/64ビットはプラットフォームにより決定)
3.14typeof value === 'number' && !Number.isInteger(value)Double浮動小数点数はDoubleにマッピング
"hello"typeof value === 'string'String文字列はStringにマッピング
[] (空配列)Array.isArray(value) && value.length === 0[Any]要素型を推論できないため、サンプルを補充するか具体的な型に手動変更することを推奨
["a", "b"]Array.isArray(value) && typeof value[0] === 'string'[String]文字列配列
[1, 2, 3]Array.isArray(value) && typeof value[0] === 'number'[Int]整数配列
[1.5, 2.5]Array.isArray(value) && typeof value[0] === 'number' && !Number.isInteger(value[0])[Double]浮動小数点配列
[{...}, {...}]Array.isArray(value) && typeof value[0] === 'object'[Item]オブジェクト配列、要素はカスタム型、命名はフィールド名から推論
{...} (ネストオブジェクト)typeof value === 'object' && !Array.isArray(value)独立したstruct/class再帰的に独立した型を生成、命名はフィールド名の先頭を大文字

JSONからSwiftのAppleエコシステムでの一般的な使用シナリオ

生成されたSwift型はAppleプラットフォーム/サードパーティフレームワークのさまざまなシナリオで直接使用できます:

使用シナリオよく使われるフレームワーク追加が必要なプロトコル/処理典型的なコードスニペット
REST APIパースURLSession + JSONDecoder型にCodableを追加し、struct値セマンティクスを維持try JSONDecoder().decode(User.self, from: data)
HTTPリクエストの簡素化Alamofire型にCodableを追加し、responseDecodableと組み合わせるsession.request(url).responseDecodable(of: User.self)
ネットワーク層の抽象化Moya型にCodableを追加し、Moyaが自動的にデシリアライズprovider.request(.user(id: 1)).map(User.self)
リアクティブデータフローCombine + JSONDecoder型にCodableを追加し、dataTaskPublisherと組み合わせるURLSession.shared.dataTaskPublisher(for: url).decode(type: User.self, decoder: decoder)
SwiftUIリスト表示SwiftUI List + Identifiable型にIdentifiableを追加し、Listが自動的にforEachList(items) { Text($0.name) }
サーバーサイドモデル定義Vapor型にCodableを追加し、Vaporが自動的にContentシリアライズstruct User: Codable, Content { var id: Int; var name: String }
ローカル永続化モデルSwiftData / Core Data生成したstruct/classに@Model/@NSManagedを追加@Model class User { var id: Int; var name: String }
クロスエンド型共有JSONからSwift + JSONからTypeScriptの併用SwiftとTSのフィールド名を一致させ、TSエンドでTS型と組み合わせるSwift: var name: String / TS: name: string

Privacy & Security

本JSONからSwiftツールのすべてのJSON解析、Swift型生成操作は完全にあなたのブラウザローカルでJavaScript(quicktype-core/Web Worker)により実行され、入力されたJSONデータと生成されたSwiftコードはいかなるサーバーにもアップロードされず、クラウドに記録、キャッシュ、または保存されることもありません。内部インターフェースフィールド、API key、token、ユーザープライバシーデータ、未公開ビジネス構造を含む機密JSONも安心して使用でき、ページを閉じるかリフレッシュするとすべての入出力コンテンツはメモリから自動的に消去され、いかなるサードパーティネットワークサービスにも依存しません。

Authoritative References