logo
GeekFormat

JSON zu Swift

Kostenloser Online-JSON-zu-Swift-Konverter. Wandeln Sie API-Antworten, Konfigurationsdateien oder Log-JSON mit einem Klick in reine Swift struct/class-Typdeklarationen um. Keine Registrierung, kein Upload — Echtzeit-Generierung in Ihrem Browser. Perfekt für die schnelle Modellierung in iOS-, macOS-, watchOS- und tvOS-Projekten.

Ähnliche Tools

Über JSON zu Swift: JSON-Daten in native Typen des Apple-Ökosystems umwandeln

JSON zu Swift ist der Prozess der automatischen Konvertierung von JSON-formatierten Daten (Objekten oder Arrays) in Swift struct/class-Typdeklarationen. JSON ist der De-facto-Standard für REST-APIs, Konfigurationsdateien und Analyse-Logs, während Swift die primäre Entwicklungssprache für iOS-, macOS-, watchOS- und tvOS-Anwendungen sowie eine Kernsprache für serverseitige Frameworks wie Vapor ist. In der Entwicklung ist es häufig notwendig, entsprechende Swift-Typen für von APIs zurückgegebenes JSON zu schreiben; das manuelle Schreiben ist zeitaufwändig und anfällig für das Übersehen optionaler Felder. Der Zweck dieses Tools besteht darin, diesen Prozess zu automatisieren.

Dieses Tool verwendet quicktype-core, um die Konvertierung lokal im Browser durchzuführen. quicktype ist ein mehrsprachiger Strukturgenerator; dieses Tool aktiviert die just-types- und no-comments-Optionen für Swift, sodass die Ausgabe saubere struct/class-Eigenschaftsdeklarationen ohne Serialisierungsannotation wie Codable, Decodable oder Encodable und ohne Import-Anweisungen oder Dateikopfkommentare ist. Diese „nackten Typen“ ermöglichen es Entwicklern, frei Protokolle hinzuzufügen, die Zugriffssteuerung anzupassen oder Namenskonventionen an die Präferenzen von Netzwerk-Frameworks wie Alamofire / Moya zu ändern.

Swifts Typsystem ist für seine Sicherheit bekannt. struct ist ein Werttyp, geeignet zur Darstellung unveränderlicher Daten; class ist ein Referenztyp, geeignet für Szenarien, die gemeinsamen Zustand oder Vererbung erfordern. Von diesem Tool generierte Eigenschaften werden so genau wie möglich auf Swifts String, Int, Double, Bool, [T], benutzerdefinierte Typen usw. abgebildet. Nach der Generierung können Entwickler bestimmte Felder je nach Geschäftsanforderungen in Optional (?) ändern, Typen das Codable-Protokoll hinzufügen oder ein gesamtes struct zu einer class hochstufen, um Referenzsemantik zu erhalten.

Die Handhabung verschachtelter Objekte ist eine Schlüsselfähigkeit des Tools. Wenn JSON verschachtelte Objekte enthält, generiert das Tool rekursiv unabhängige Untertypen; wenn Root beispielsweise ein address-Objekt enthält, wird ein Address-Typ generiert, und der Haupttyp referenziert ihn über var address: Address. Dies vermeidet doppelte Typdefinitionen und ermöglicht es der Autovervollständigung und Typprüfung von Xcode, Hierarchiebeziehungen korrekt zu verfolgen. Die Benennungsregel schreibt den ersten Buchstaben des Feldnamens groß; beispielsweise werden Elemente in einem users-Array als User benannt.

Die Array-Typinferenz folgt einer Strategie „Inferenz nach erstem Element“. Wenn Array-Elemente Strings sind, wird [String] generiert; bei Ganzzahlen [Int]; bei Gleitkommazahlen [Double]; bei Objekten [benutzerdefinierter Typ]. Leere Arrays [] fehlen Beispiele, daher wird [Any] oder ein Fallback-Typ generiert; nach der Generierung wird empfohlen, sie je nach tatsächlichem Geschäft auf konkrete Typen zu ändern. Für besonders große oder lückenhafte Arrays wird empfohlen, echte Beispielelemente in das Quell-JSON einzufügen, um die Inferenzgenauigkeit zu verbessern.

Die reine Frontend-Verarbeitung ist der zentrale Architekturvorteil dieses Tools. Das gesamte JSON-Parsing und die Swift-Code-Generierung werden in Browser-JavaScript ausgeführt (einschließlich quicktype-core in einem Web Worker), unabhängig von Backend-Diensten, und es werden keine Daten an einen Server gesendet. Dieses Design schützt JSON-Daten, die vertrauliche Informationen enthalten können, und stellt sicher, dass die Konvertierungsgeschwindigkeit nur durch die Leistung des lokalen Geräts begrenzt ist, ohne auf Netzwerkumlauzeiten warten zu müssen. Es ist besonders wichtig bei der Verarbeitung von JSON, das API-Schlüssel oder unveröffentlichte Geschäftsfelder enthält.

Im Gegensatz zu einigen Online-Tools, die Codable / CodingKeys / Date-Decodierungsstrategien zwangsweise binden, hält sich dieses Tool an ein Minimalausgabeprinzip: Teammitglieder haben oft unterschiedliche Präferenzen bezüglich Protokollen, Namensgebung und Zugriffssteuerung, und dieses Tool überlässt die Protokoll- und Strategiewahl den Entwicklern zur projektbezogenen Verfeinerung. Dieser Arbeitsablauf „Halbzeug generieren + projektbezogene Nachbearbeitung“ ist bei Ingenieuren in mittleren und großen Teams im Allgemeinen beliebter als Lösungen „mit einem Klick alles erledigen“.

Anwendungsfälle

  • iOS-Entwicklung: Konvertieren Sie von Backend-REST-APIs zurückgegebenes JSON in Swift-Structs für die SwiftUI- oder UIKit-Netzwerkschichtmodellierung und JSONDecoder-Decodierung
  • macOS-Entwicklung: Konvertieren Sie App-Konfigurations-JSON in Swift-Typen für typsicheres Konfigurationslesen in AppKit-Projekten, um Tippfehler zu vermeiden
  • watchOS-Entwicklung: Konvertieren Sie Gesundheits- und Fitnessdaten-JSON in Swift-Modelle für Apple Watch-Apps und integrieren Sie diese mit SwiftUI und HealthKit
  • tvOS-Entwicklung: Konvertieren Sie Inhaltsempfehlungs-API-JSON in Swift-Typen für die Anzeige von TV-App-Startseitendaten und die Fokusnavigation
  • SwiftUI-MVVM-Modellierung: Binden Sie API-Datenmodelle direkt als @Published-Eigenschaften an ViewModels und treiben Sie Interface-Ansichten an
  • Combine-reaktive Datenströme: Verwenden Sie JSON-Antworttypen als Ausgabetypen von Publisher und arbeiten Sie mit JSONDecoder für reaktives Parsing
  • SwiftData / Core Data-Vor-Modellierung: Generieren Sie zuerst Swift-Structs und fügen Sie dann manuell @Model- oder @NSManaged-Annotationen für das Entitätsmapping hinzu
  • Integration von Drittanbieter-SDKs: Konvertieren Sie JSON-Antwortbeispiele aus SDK-Dokumentationen in Swift-Typen für die schnelle Integration mit Anmelde-, Zahlungs-, Push-Benachrichtigungs-, Karten- und anderen SDKs
  • Unit-Test-Vorbereitung: Konvertieren Sie Interface-Mock-JSON in Swift-Typen für XCTest-Testdaten und Assertions, um die Testwartbarkeit zu verbessern
  • Code-Review: Konvertieren Sie API-Antwort-JSON in Swift-Typen, um Team-Code-Review-Diskussionen über Feldbenennung und Optionalität zu erleichtern
  • Flutter / React Native-Hybridentwicklung: Bereiten Sie Datenmodelle für den Aufruf nativer Swift-Module vor und reduzieren Sie Typkonvertierungsfehler auf der Bridge-Ebene
  • Backend-API-Migration: Generieren Sie Swift-Client-Modelle aus REST-API-Dokumentation oder Postman-Beispiel-JSON und ermöglichen Sie eine schnelle Synchronisation bei Versionsupgrades
  • Lehre und Ausbildung: Demonstrieren Sie die JSON-zu-Typsystem-Abbildung in Swift/iOS-Kursen, um Studenten zu helfen, API-Datenmodellierung und Typsicherheit zu verstehen
  • Gesundheits- und Fitness-Apps: Konvertieren Sie von HealthKit/Fitbit und ähnlichen APIs zurückgegebenes JSON in Swift-Typen für die Apple Health-Datenmodellierung
  • Zahlungs- und Finanz-Apps: Konvertieren Sie Zahlungs-Gateway-API-Antwort-JSON in Swift-Modelle für die Abstimmung und Ausnahmebehandlung
  • E-Commerce-Bestellsysteme: Konvertieren Sie Bestell-, Produkt-, Adress- und anderes JSON in Swift-Structs zur Verwendung mit SwiftUI-Listen und Detailseiten
  • Nachrichten- und Inhalts-Apps: Konvertieren Sie JSON-Antworten von Content-Management-Systemen in Swift-Typen für TableView / SwiftUI-Listen / Detailseiten
  • Vapor-Serverentwicklung: Konvertieren Sie Backend-API-Anfrage/Antwort-JSON in Swift-Structs für serverseitige Modelldefinitionen und Codable-Kodierung/-Dekodierung
  • MapKit und geografische Daten: Konvertieren Sie von Karten-APIs zurückgegebenes JSON in Swift-Structs für die Ortssuche, Routenplanung und Geocodierung-Ergebnismodellierung

Anleitung

  1. Fügen Sie JSON-Inhalt in den linken Editor ein oder klicken Sie auf die Upload-Schaltfläche, um eine .json / .txt-Datei auszuwählen, oder laden Sie integrierte Beispieldaten
  2. Nach einem 400ms-Debounce ruft das Tool automatisch quicktype-core zur Konvertierung auf; rechts wird der generierte Swift struct / class-Code angezeigt
  3. Wenn das JSON fehlerhaft ist, klicken Sie auf die Schaltfläche „JSON reparieren“, um häufige Syntaxprobleme automatisch zu beheben (abschließende Kommas, einfache Anführungszeichen, fehlende Anführungszeichen usw.)
  4. Überprüfen Sie das generierte Ergebnis; Sie können manuell Protokolle wie Codable / Equatable / Identifiable nach Bedarf Ihres Projekts hinzufügen. Klicken Sie auf „Kopieren“, um in Xcode einzufügen, oder auf „Herunterladen“, um als .swift-Datei zu speichern

Funktionen

  • Reine Browser-lokale Konvertierung: JSON-Parsing und Swift-Code-Generierung erfolgen über quicktype-core im Browser; weder das rohe JSON noch der generierte Code werden an einen Server hochgeladen
  • quicktype-core just-types-Modus: Die Ausgabe sind saubere Swift struct/class-Eigenschaftsdeklarationen — keine Imports, keine Codable/CodingKeys- oder andere Annotationen, bereit zur individuellen Anpassung für Ihr Projekt
  • 400ms entprellte Autokonvertierung: Nach dem Einfügen oder Bearbeiten von JSON werden Swift-Typen fast sofort generiert, ohne wiederholt auf eine Schaltfläche klicken zu müssen; die Konvertierung ist vollständig asynchron und blockiert niemals die UI
  • Web Worker-Hintergrundausführung: quicktype-core läuft in einem Browser-Web-Worker und verhindert, dass der Hauptthread bei großen JSON-Konvertierungen einfriert und der Editor ruckelt
  • Intelligente Typinferenz: Automatische Zuordnung von String, Int, Double, Bool, [T] und benutzerdefinierten Typen; Arrays werden anhand des ersten Elements typisiert — keine manuelle Angabe von Feldtypen erforderlich
  • Automatische Expansion verschachtelter Objekte: Generiert rekursiv unabhängige Swift-Typen für jedes verschachtelte Objekt, benannt durch Großschreibung des ersten Buchstabens des Feldnamens, um doppelte Typdefinitionen zu vermeiden
  • Automatische Array-Typinferenz: JSON-Arrays werden automatisch in [String] / [Int] / [Double] / [benutzerdefinierter Typ] konvertiert; leere Arrays generieren standardmäßig [Any]
  • Ein-Klick-JSON-Fehlerreparatur: Wenn häufige Formatierungsfehler gefunden werden — abschließende Kommas, einfache Anführungszeichen, fehlende Anführungszeichen, Kommentare usw. — können diese mit einem Klick automatisch repariert und die Konvertierung fortgesetzt werden
  • Ein-Klick-Kopieren + .swift-Download: Kopieren Sie den generierten Swift-Code in die Zwischenablage oder laden Sie ihn als .swift-Datei herunter, um ihn direkt in Ihr Xcode-Projekt zu ziehen
  • Beispieldaten + Datei-Upload: Integriertes Swift-stilisiertes Beispiel-JSON (mit verschachteltem address / company / tags); unterstützt Drag & Drop oder Klick zum Hochladen von .json / .txt-Dateien
  • localStorage-Eingabeverlauf: Speichert automatisch Ihre letzte Eingabe; nach dem Aktualisieren oder versehentlichen Schließen der Seite können Sie die Bearbeitung schnell fortsetzen, ohne Inhaltsverlust befürchten zu müssen
  • Responsiver Split-Screen-Editor: Live-Vorschau im geteilten Layout links/rechts, angepasst an Desktop und Mobile; reibungslose Bedienung auch auf kleinen Bildschirmen

Codebeispiele

Swift: Parsen generierter Structs mit URLSession + JSONDecoder

swift

Die häufigste Verwendung in iOS/macOS-Projekten: Fügen Sie den von diesem Tool generierten Structs Codable hinzu, rufen Sie sie dann asynchron mit URLSession ab und dekodieren Sie sie mit JSONDecoder.

import Foundation

// 1) Von diesem Tool generierter Root-Typ (mit hinzugefügtem Codable-Protokoll)
struct User: Codable {
    let id: Int
    let name: String
    let email: String
    let isActive: Bool
    let tags: [String]
}

// 2) Asynchrones Abrufen und Dekodieren mit 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) Nutzungsbeispiel (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: Deserialisieren generierter Typen mit Alamofire responseDecodable

swift

Bei Verwendung von Alamofire können Sie responseDecodable direkt verwenden, um von diesem Tool generierte Structs automatisch in Swift-Objekte zu deserialisieren.

import Foundation
import Alamofire

// Von diesem Tool generierter Typ, nach Hinzufügen von Codable direkt verwendbar
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-Stil 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-Stil-Aufrufbeispiel
// provider.request(.product(id: 1)).map(Product.self)
// let product: Product = try await provider.request(.product(id: 1)).map(Product.self)

Swift: Reaktives Parsen mit Combine + JSONDecoder

swift

In SwiftUI / Combine-Projekten können Sie generierte Structs zusammen mit dataTaskPublisher / decode für reaktive Datenströme verwenden.

import Foundation
import Combine

// Von diesem Tool generierter Root-Typ
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
    }

    /// Datenstrom mit Combine bereitstellen
    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()
    }

    /// In SwiftUI ViewModel abonnieren
    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

Häufig gestellte Fragen

Wie konvertiere ich JSON zu einem Swift Struct?

Fügen Sie Ihren JSON-Inhalt in die linke Eingabebox ein. Nach einem 400ms-Debounce ruft das Tool automatisch quicktype-core auf, um es in Swift-Code zu konvertieren, und zeigt das Ergebnis in Echtzeit im rechten Panel an. Sie können auch auf die Upload-Schaltfläche klicken, um eine .json / .txt-Datei auszuwählen, oder auf die Beispiel-Schaltfläche klicken, um integrierte Daten zu laden. Nach Abschluss der Konvertierung können Sie das Ergebnis kopieren oder als .swift-Datei herunterladen.

Enthält der generierte Swift-Code Codable?

Standardmäßig nicht. Dieses Tool verwendet den just-types-Modus von quicktype-core, der reine struct/class-Eigenschaftsdeklarationen ohne Codable-, Decodable- oder Encodable-Annotationen und ohne Import-Anweisungen ausgibt. Wenn Sie Codable benötigen, fügen Sie nach der Generierung einfach : Codable hinzu (z. B. struct User: Codable {}), oder schreiben Sie Ihre eigene JSONDecoder-Parsing-Logik.

Welche JSON-Datenstrukturen werden unterstützt?

Alle gültigen JSON werden unterstützt: Basistypen (null, boolean, number, string), ein- oder mehrdimensionale Arrays und verschachtelte Objekte beliebiger Tiefe. Die Root-Eingabe kann ein JSON-Objekt oder ein JSON-Array sein; das Tool priorisiert Objekte und inferiert Arrays anhand ihres ersten Elements. Nicht unterstützte Eingaben umfassen JavaScript-Spezialwerte (Funktionen, Symbol, undefined) und Nicht-JSON-Text.

Wie werden verschachtelte JSON-Objekte behandelt?

Das Tool generiert rekursiv unabhängige Swift-Typen für jedes verschachtelte Objekt. Die Benennung basiert auf einer Kombination aus übergeordnetem Typnamen und Feldnamen; wenn Root beispielsweise ein address-Feld enthält, wird ein Untertyp Address generiert, und der Haupttyp referenziert ihn über var address: Address. Dies vermeidet doppelte Typdefinitionen und ermöglicht es der Autovervollständigung und Typprüfung von Xcode, Hierarchiebeziehungen korrekt zu verfolgen.

Werden Array-Felder zu Swift-Arrays?

Ja. JSON-Arrays werden automatisch in die Swift-Form [T] konvertiert. Wenn Array-Elemente Strings sind, wird [String] generiert; bei Ganzzahlen [Int]; bei Gleitkommazahlen [Double]; bei Objekten [benutzerdefinierter Typ]. Leere Arrays [] haben keine Beispielelemente, daher wird standardmäßig [Any] generiert; nach der Generierung wird empfohlen, ihn manuell in einen konkreten Typ wie [String] oder [Int] zu ändern.

Welcher Typ wird für null-Wert-Felder generiert?

null-Werte in JSON können ihren konkreten Typ nicht inferieren; das Tool kann Any oder einen Fallback-Typ generieren. Es wird empfohlen, null-wertige Felder im Quell-JSON durch Beispielwerte zu ersetzen (z. B. "field": "" inferiert String) oder sie manuell in Optional zu ändern (z. B. var phone: String?), was besser zur Sicherheitssemantik von Swifts Typsystem passt.

Kann ich den Namen des generierten Structs anpassen?

Ja. Klicken Sie auf die Typnamen-Schaltfläche (oder den Einstellungseintrag) in der Symbolleiste, um den Root-Typnamen zu ändern (Standard ist Root oder wird aus Beispieldaten inferiert). Untertypnamen werden automatisch basierend auf dem Root-Namen und den Feldnamen generiert; die Benennungsregel besteht darin, den ersten Buchstaben des Feldnamens großzuschreiben, z. B. users → User, tags → Tag.

Was ist, wenn mein JSON fehlerhaft ist?

Das Tool erkennt automatisch die Gültigkeit des JSON; bei einem Fehler wird eine spezifische Fehlermeldung rechts angezeigt und eine Schaltfläche „JSON reparieren“ bereitgestellt. Durch Klicken werden häufige Fehler automatisch repariert: abschließende Kommas, einfache durch doppelte Anführungszeichen ersetzt, fehlende Anführungszeichen bei Schlüsseln ergänzt, Kommentare entfernt usw. Nach erfolgreicher Reparatur können Sie mit der Konvertierung fortfahren, ohne das JSON manuell korrigieren zu müssen.

Werden meine Daten an einen Server hochgeladen? Sind sie privat und sicher?

Es läuft vollständig in Ihrem Browser. Das gesamte JSON-Parsing und die Swift-Code-Generierung erfolgen lokal über Browser-JavaScript (einschließlich quicktype-core in einem Web Worker); das von Ihnen eingegebene JSON und der generierte Swift-Code werden niemals an einen Server hochgeladen, noch in der Cloud aufgezeichnet oder zwischengespeichert. Sensibles JSON mit API-Schlüsseln, Tokens, Benutzerdatenschutzfeldern oder unveröffentlichten Geschäftsstrukturen kann sicher verwendet werden — beim Schließen der Seite wird alles gelöscht.

Kann der generierte Code direkt in einem Xcode-Projekt verwendet werden?

Ja. Der generierte Code ist Standard-Swift-Syntax und kann direkt in eine .swift-Datei von Xcode kopiert oder über die Schaltfläche „Herunterladen“ als .swift-Datei gespeichert und in Ihr Projekt gezogen werden. Da die Ausgabe reine Typdeklarationen sind, wird empfohlen, manuell Protokolle wie Codable, Equatable, Identifiable nach Bedarf hinzuzufügen oder Zugriffssteuermodifikatoren (public / internal / private) anzupassen.

Werden JSON-Arrays als Root-Eingabe unterstützt?

Ja. Wenn die Root-Eingabe ein JSON-Array ist, verwendet das Tool das erste Element des Arrays als Vorlage, um einen Elementtyp zu generieren, und gibt diese Elementtypdefinition aus. Zum Beispiel generiert [{"id":1,"name":"A"}] ein Struct namens Item (oder einen aus den Feldern abgeleiteten Namen), dessen Felder die des ersten Elements sind; der Haupttyp referenziert es über eine Eigenschaft items: [Item], wodurch vermieden wird, das Array direkt als Root-Typ zu behandeln.

Verursacht die Konvertierung großer JSON Verzögerungen?

Es gibt keine explizite Größenbeschränkung, aber der Browser wird beim Parsen und Rendern sehr großer JSON langsamer. Empfehlungen: ① Konvertieren Sie JSON nur eines Geschäftsmoduls gleichzeitig; ② Teilen Sie tiefe Verschachtelungsebenen und verarbeiten Sie diese getrennt; ③ Für JSON über mehrere MB können Sie die Kommandozeilenversion von quicktype verwenden; ④ Das Aufteilen desselben JSON in mehrere Submodule und deren separate Konvertierung kann die Speichernutzung erheblich reduzieren.

Können JSON zu Swift und JSON zu TypeScript austauschbar verwendet werden?

Beide konvertieren JSON in Typdefinitionen für ihre jeweiligen Sprachen, aber ihr Fokus unterscheidet sich: JSON zu Swift generiert struct/class-Eigenschaftsdeklarationen für native iOS/macOS-Apps; JSON zu TypeScript generiert interface/type-Deklarationen für die Frontend-Typprüfung. Wenn Ihr Projekt sowohl einen iOS-Client als auch ein Web-Frontend hat, wird empfohlen, sowohl Swift- als auch TS-Versionen aus demselben JSON zu generieren, um die Typkonsistenz auf beiden Seiten sicherzustellen.

Wie füge ich das Codable-Protokoll zum generierten Code hinzu?

Dieses Tool generiert standardmäßig reine Typen ohne Protokolle. Nach der Generierung müssen Sie nur : Codable nach der struct/class-Deklaration hinzufügen, z. B. struct User: Codable {}, und JSONDecoder kann es verwenden. Wenn Sie Codable standardmäßig wünschen, können Sie quicktype-core forken und seinen Swift-Renderer anpassen oder die Stapelersetzung von Xcode verwenden, um das Protokoll nach der Generierung allen Typen hinzuzufügen.

Benötigt es Internet? Kann ich es auf Mobilgeräten verwenden?

Der erste Besuch erfordert Internet, um Tool-Skripte und quicktype-core-Ressourcen zu laden; danach kann es offline aus dem Browser-Cache laufen (in einem bereits besuchten Browser). Mobile Browser (iOS Safari, Android Chrome) funktionieren ebenfalls normal; die Benutzeroberfläche verwendet ein responsives Split-Screen-Design, das im Hochformat automatisch zur vertikalen Stapelung wechselt.

Kann ich nach der Generierung einen einzelnen Typ ändern, ohne andere zu beschädigen?

Ja. Nach der Generierung ist jeder Swift-Typ ein unabhängiges struct/class; die Ausgabe des Tools ist reiner Text. Sie können einen einzelnen Typ einzeln kopieren und in Xcode einfügen oder die Refaktorisierung „Rename“ von Xcode verwenden, um Typen und Felder stapelweise zu ändern, ohne andere Typen zu beeinflussen. Wenn Sie die gesamte Typgruppe neu generieren müssen, aktualisieren Sie einfach die Seite und fügen Sie das JSON erneut ein.

Wird die Swift-Enum-Inferenz unterstützt?

Die Unterstützung von quicktype für Unions/Enums erfordert zusätzliche Typhinweise oder GraphQL/JSON Schema-Eingaben. Das Inferieren von Enums allein aus JSON-Beispielen ist schwierig, daher generiert dieses Tool standardmäßig keine Enums. Wenn Sie Enums benötigen, können Sie das entsprechende struct manuell in ein enum + Codable ändern oder zuerst ein JSON-zu-Kotlin/TypeScript-Tool verwenden, um Enum-Typen zu erhalten, und diese dann manuell zu Swift migrieren.

Fehlerbehebung

Zeigt „Bitte JSON-Daten eingeben“ oder rechte Seite ist leer

Die linke Eingabebox ist leer oder enthält nur Leerzeichen. Bitte fügen Sie gültigen JSON-Inhalt ein oder klicken Sie auf „Beispiel“, um ein Beispiel zu laden, oder auf „Hochladen“, um eine .json / .txt-Datei auszuwählen.

Zeigt „Unexpected token ... in JSON“

Das JSON ist fehlerhaft. Häufige Ursachen: ① abschließendes Komma (z. B. {"a":1,}); ② einfache statt doppelter Anführungszeichen; ③ JS-Objektsyntax (z. B. {key: value}) statt JSON (z. B. {"key": "value"}); ④ enthält JavaScript-Kommentare. Durch Klicken auf die Schaltfläche „JSON reparieren“ können einige häufige Fehler automatisch repariert werden.

Generierte Typen fehlt Codable und können nicht direkt mit JSONDecoder verwendet werden

Dies ist erwartetes Verhalten. Dieses Tool verwendet den just-types-Modus und gibt reine struct/class-Eigenschaftsdeklarationen aus. Wenn Sie Codable benötigen, fügen Sie den Typen nach der Generierung : Codable hinzu (z. B. struct User: Codable {}), oder schreiben Sie extension User: Codable {}, bevor Sie JSONDecoder aufrufen.

Leeres Array [] hat [Any] generiert

Leere Arrays haben keine Beispielelemente, daher generiert das Tool den Fallback-Typ [Any]. Es wird empfohlen, mindestens ein Beispielelement in das Quell-JSON einzufügen (z. B. [1, 2]), den Beispielwert nach der Generierung zu löschen und manuell einen konkreten Typ anzugeben; oder direkt nach der Generierung zu einem präziseren Typ wie [String] / [User] zu wechseln.

null-Wert-Feldtyp ist ungewiss

JSON null kann seinen konkreten Typ nicht inferieren; das Tool kann Any oder einen Fallback-Typ generieren. Es wird empfohlen, null im Quell-JSON durch einen repräsentativen Beispielwert zu ersetzen (z. B. "" oder 0) und dann dieses Feld nach der Generierung in Optional (?) oder einen konkreten Typ zu ändern, z. B. var phone: String?.

Generierte Typnamen entsprechen nicht den Projektkonventionen

Sie können den Root-Typnamen in der Symbolleiste ändern; Untertypnamen werden automatisch basierend auf Root-Name + Feldnamen generiert. Wenn Sie immer noch unzufrieden sind, verwenden Sie die Rename-Refaktorisierung von Xcode zur Stapeländerung nach der Generierung (Rechtsklick → Refactor → Rename); Xcode aktualisiert alle Referenzen synchron.

Seite ruckelt nach Konvertierung großer JSON

Der Browser wird beim Rendern sehr großer JSON und der Generierung vieler Typen langsamer. Es wird empfohlen, das JSON in mehrere unabhängige Geschäftsmodule aufzuteilen und separat zu konvertieren oder nur Schlüsselobjekte zu extrahieren, die modelliert werden müssen; für JSON über 10 MB empfehlen wir die Kommandozeilenversion von quicktype.

Xcode-Kompilierungsfehler: „Type 'X' does not conform to protocol 'Decodable'“

Dies bedeutet, dass Sie einigen Feldern Codable hinzugefügt haben, aber Optional / Date / Enum-Typen nicht korrekt behandelt haben. Häufige Korrekturen: ① Ändern Sie alle Felder, die null sein können, in Optional<T>; ② Passen Sie die Datumsstrategie mit JSONDecoder().dateDecodingStrategy = .iso8601 an; ③ Passen Sie CodingKeys an, um JSON-Schlüssel mit Swift-Eigenschaftsnamen auszurichten.

Feldnamen sind snake_case, aber Swift-Konvention ist camelCase

Dieses Tool behält ursprüngliche JSON-Feldnamen standardmäßig bei, daher werden snake_case-Felder so wie sie sind generiert. Wenn Sie zu camelCase vereinheitlichen möchten, können Sie nach der Generierung mit Xcode Rename stapelweise umbenennen oder Feldnamen in einem benutzerdefinierten quicktype-Renderer in camelCase umwandeln und dann CodingKeys-Mappings hinzufügen, um korrektes JSON-Decodieren sicherzustellen.

Heruntergeladene .swift-Datei gibt Fehler bei chinesischen Schlüsseln beim Öffnen in Xcode

Swift empfiehlt Feldnamen als englische ASCII-Identifikatoren. Wenn das Quell-JSON chinesische Schlüssel enthält (z. B. {"姓名": "Alice"}), wird das generierte var 姓名: String in einigen älteren Versionen Swift-Compiler-Fehler verursachen. Es wird empfohlen, die Schlüssel im Quell-JSON in Englisch zu ändern (z. B. name), was besser den Swift-Codierstandards entspricht.

Typen haben nur var, keine let / private-Steuerungen

Dieses Tool generiert standardmäßig var public-Eigenschaften zur einfachen Nachbearbeitung. Wenn Sie let oder Zugriffssteuerung wünschen (z. B. private(set)), können Sie mit Xcode Refactor → Add Access Control stapelweise ändern oder var nach der Generierung mit sed / einem Textbearbeitungstool durch let ersetzen.

JSON enthält ISO 8601-Datumsstrings, generiertes Date-Feld schlägt beim Dekodieren fehl

Dieses Tool bildet ISO 8601-Strings standardmäßig auf String ab; Swift konvertiert sie nicht automatisch in Date. Sie müssen dateDecodingStrategy in JSONDecoder festlegen, z. B. JSONDecoder().dateDecodingStrategy = .iso8601. Wenn das Datumsformat nicht standardmäßig ist, müssen Sie auch manuell einen DateFormatter oder eine benutzerdefinierte Parsing-Logik implementieren.

Verschachtelung ist zu tief, Namenskonflikte

Das Tool benennt Untertypen nach „ersten Buchstaben des Feldnamens großschreiben“. Tief verschachteltes JSON kann verschachtelte Objekte mit demselben Namen haben, die Typkonflikte verursachen. Lösungen: ① Fügen Sie Geschäftspräfixe zu Feldern im Quell-JSON hinzu; ② Teilen Sie das Root-JSON in mehrere unabhängige Module auf und generieren Sie separat; ③ Verwenden Sie Xcode Rename, um konfliktbehaftete Typnamen nach der Generierung stapelweise zu ändern.

public struct generiert, aber Projekt verwendet Modulisolation

Dieses Tool generiert standardmäßig internal struct ohne expliziten public-Modifikator. Wenn Ihr Projekt nach Modulen aufgeteilt ist und modulübergreifenden Zugriff erfordert, müssen Sie struct in Xcode stapelweise durch public struct ersetzen oder das public-Schlüsselwort nach der Generierung mit sed/awk-Skripten einheitlich hinzufügen.

Glossar

struct
Ein Werttyp in Swift. Standardmäßig geeignet zur Darstellung unveränderlicher Datenmodelle; Werte werden bei Zuweisung kopiert. Dieses Tool generiert standardmäßig Structs zur Darstellung von JSON-Objekten.
class
Ein Referenztyp in Swift. Geeignet für Szenarien, die gemeinsamen Zustand, Vererbung oder Identität (===) erfordern. Dieses Tool kann unter bestimmten Konfigurationen Klassen generieren.
Optional (?)
Ein Typmodifikator in Swift, der angibt, dass ein Wert nil sein kann, z. B. var name: String?. Von diesem Tool generierte Felder sind standardmäßig nicht-Optional; Sie können nach der Generierung manuell ? hinzufügen, je nachdem, ob ein JSON-Feld fehlen kann.
Array ([T])
Abkürzung für Array-Typen in Swift. Dieses Tool konvertiert JSON-Arrays in [T], wobei T aus Array-Elementtypen inferiert wird, z. B. [String], [Int] oder [benutzerdefinierter Typ].
Codable
Eine Protokollkombination aus Decodable und Encodable in Swift. Nach der Implementierung von Codable kann JSONDecoder JSON-Daten in Typinstanzen parsen. Dieses Tool generiert Codable nicht standardmäßig; es muss manuell hinzugefügt werden.
JSONDecoder
Ein JSON-Parser im Foundation-Framework. Wird mit dem Codable-Protokoll verwendet, um Data in Swift-Typinstanzen zu konvertieren. Nachdem dieses Tool reine Typen ausgegeben hat, können Entwickler JSONDecoder zum Parsen verwenden.
URLSession
Die Netzwerk-API im Foundation-Framework von Apple. Die übliche Verwendung ist URLSession.shared.data(from: url), die zusammen mit JSONDecoder die API-Integration abschließt.
Alamofire
Die beliebteste HTTP-Drittanbieter-Netzwerkbibliothek in der Swift-Community. Baut auf URLSession auf und unterstützt responseDecodable zur direkten Deserialisierung in Swift-Typen.
Moya
Eine Swift-Netzwerkabstraktionsschicht, üblicherweise zusammen mit Alamofire verwendet. Moya in Kombination mit Codable-Typen kann API-Aufruf-Boilerplate erheblich vereinfachen.
Vapor
Das vorherrschende serverseitige Framework für Swift, das zum Erstellen von Webanwendungen auf macOS / Linux verwendet wird. Die von diesem Tool generierten Swift-Structs können auch für Vapor-Routenmodelle verwendet werden.
quicktype
Ein quelloffenes mehrsprachiges Typgenerierungstool. Dieses Tool führt die JSON-zu-Swift-Konvertierung über quicktype-core in einem Browser-Web-Worker durch.
Property
Eine Eigenschaftsdeklaration in einem Swift-Typ. Dieses Tool bildet jeden JSON-Schlüssel auf eine Swift-Eigenschaft ab; z. B. "name": "Alice" wird zu var name: String abgebildet.
Type Inference
Der Prozess der automatischen Inferenz von Swift-Typen aus der Literalform von JSON-Werten. Dieses Tool bildet basierend auf null, boolean, number, string, array und object ab.
localStorage
Browser-lokaler Schlüssel-Wert-Speicher. Dieses Tool verwendet localStorage, um den jüngsten Eingabeverlauf für die Wiederherstellung nach Aktualisierung oder versehentlichem Schließen der Seite zu speichern.
Web Worker
Ein vom Browser bereitgestellter Hintergrund-Thread-Mechanismus. Dieses Tool lädt und führt quicktype-core über einen Web Worker aus, um zu verhindern, dass große JSON-Konvertierungen den Hauptthread blockieren.
SwiftUI
Das deklarative UI-Framework von Apple. Die von diesem Tool generierten Swift-Typen können als Datenmodelle für SwiftUI-Ansichten dienen und die Oberfläche mit @State / @ObservedObject antreiben.
Combine
Das reaktive Programmierframework von Apple. Generierte Swift-Typen in Kombination mit JSONDecoder können reaktive dataTaskPublisher-Datenströme aufbauen.
SwiftData
Das 2023 von Apple eingeführte Datenpersistenz-Framework. Von diesem Tool generierte Typen können als SwiftData-Modellbasisklassen dienen; das Hinzufügen von @Model macht sie durch SwiftData verwaltbar.
Value Type / Reference Type
In Swift ist struct ein Werttyp und class ein Referenztyp. Dieses Tool generiert standardmäßig Struct, das bei Zuweisung kopiert wird; wenn Referenzsemantik benötigt wird, können Sie manuell zu class wechseln.
Field Naming
Dieses Tool behält standardmäßig ursprüngliche JSON-Feldnamen bei. Wenn das Quell-JSON snake_case verwendet und das Projekt camelCase erfordert, müssen Sie manuell umbenennen oder den quicktype-Renderer anpassen.
ISO 8601 Date
Ein gängiges JSON-Datumsformat, z. B. 2026-07-14T10:00:00Z. Erfordert JSONDecoder.dateDecodingStrategy = .iso8601, um korrekt in Date-Typen geparst zu werden.

Schnellreferenz zur JSON-Typ-zu-Swift-Typ-Zuordnung

Das Tool inferiert automatisch entsprechende Swift-Typen basierend auf der Form von JSON-Werten:

JSON-Wert-BeispielErkennungsmethodeGenerierter Swift-TypHinweise
nullvalue === nullAny? oder konkretes OptionalKann keinen konkreten Typ inferieren; empfehle manuelle Änderung zu Optional<T> nach Generierung
true / falsetypeof value === 'boolean'BoolDirekte Abbildung auf Swift-Bool-Typ
42typeof value === 'number' && Number.isInteger(value)IntGanzzahlen werden auf Int abgebildet (32/64 Bit plattformabhängig)
3.14typeof value === 'number' && !Number.isInteger(value)DoubleGleitkommazahlen werden auf Double abgebildet
"hello"typeof value === 'string'StringStrings werden auf String abgebildet
[] (leeres Array)Array.isArray(value) && value.length === 0[Any]Kann Elementtyp nicht inferieren; empfehle Beispiel hinzufügen oder manuell zu konkretem Typ ändern
["a", "b"]Array.isArray(value) && typeof value[0] === 'string'[String]String-Array
[1, 2, 3]Array.isArray(value) && typeof value[0] === 'number'[Int]Ganzzahl-Array
[1.5, 2.5]Array.isArray(value) && typeof value[0] === 'number' && !Number.isInteger(value[0])[Double]Gleitkomma-Array
[{...}, {...}]Array.isArray(value) && typeof value[0] === 'object'[Item]Objekt-Array, Elemente sind benutzerdefinierte Typen, Namen aus Feldnamen inferiert
{...} (verschachteltes Objekt)typeof value === 'object' && !Array.isArray(value)Unabhängiges struct / classGeneriert rekursiv unabhängige Typen, benannt durch Großschreibung von Feldnamen

Common Use Cases for JSON to Swift in the Apple Ecosystem

Generated Swift types can be directly used in different scenarios on Apple platforms/third-party frameworks:

Use CaseCommon FrameworksRequired Protocols/ProcessingTypical Code Snippet
REST API parsingURLSession + JSONDecoderAdd Codable to types, maintain struct value semanticstry JSONDecoder().decode(User.self, from: data)
Simplified HTTP requestsAlamofireAdd Codable to types, pair with responseDecodablesession.request(url).responseDecodable(of: User.self)
Abstract network layerMoyaAdd Codable to types, Moya auto-deserializesprovider.request(.user(id: 1)).map(User.self)
Reactive data streamsCombine + JSONDecoderAdd Codable to types, combine with dataTaskPublisherURLSession.shared.dataTaskPublisher(for: url).decode(type: User.self, decoder: decoder)
SwiftUI list displaySwiftUI List + IdentifiableAdd Identifiable to types for automatic List forEachList(items) { Text($0.name) }
Server model definitionsVaporAdd Codable to types, Vapor auto Content serializationstruct User: Codable, Content { var id: Int; var name: String }
Local persistence modelsSwiftData/Core DataAdd @Model/@NSManaged to generated struct/class@Model class User { var id: Int; var name: String }
Cross-platform type sharingJSON to Swift + JSON to TypeScript combinedKeep Swift and TS field names consistent, pair TS types on TS endSwift: var name: String / TS: name: string

Privacy & Security

Dieses JSON-zu-Swift-Tool führt alle JSON-Parsing- und Swift-Typgenerierungsvorgänge vollständig in Ihrem Browser über JavaScript (quicktype-core / Web Worker) durch. Die von Ihnen eingegebenen JSON-Daten und der generierte Swift-Code werden niemals an einen Server hochgeladen, noch in der Cloud aufgezeichnet, zwischengespeichert oder gespeichert. Sensibles JSON mit internen API-Feldern, API-Schlüsseln, Tokens, Benutzerdatenschutzdaten oder unveröffentlichten Geschäftsstrukturen kann sicher verwendet werden; alle Eingabe- und Ausgab einhalte werden automatisch aus dem Arbeitsspeicher gelöscht, wenn Sie die Seite schließen oder aktualisieren, ohne auf Netzwerkdienste Dritter angewiesen zu sein.

Authoritative References