logo
GeekFormat

JSON vers Swift

Convertisseur JSON vers Swift gratuit en ligne. Convertissez en un clic des réponses API, des fichiers de configuration ou du JSON de logs en déclarations de types struct/class Swift pures. Sans inscription, sans téléchargement : génération en temps réel dans votre navigateur. Parfait pour la modélisation rapide dans les projets iOS, macOS, watchOS et tvOS.

Recommandations connexes

À propos de JSON vers Swift : Transformer les données JSON en types natifs de l'écosystème Apple

JSON vers Swift est le processus de conversion automatique de données au format JSON (objets ou tableaux) en déclarations de types struct/class Swift. JSON est le standard de facto pour les API REST, les fichiers de configuration et les journaux d'analyse, tandis que Swift est le langage de développement principal pour les applications iOS, macOS, watchOS et tvOS, ainsi qu'un langage central pour les frameworks côté serveur comme Vapor. Dans le développement, il est fréquemment nécessaire d'écrire les types Swift correspondants pour le JSON renvoyé par les API ; les écrire à la main prend du temps et est sujet à omettre des champs optionnels. Le but de cet outil est d'automatiser ce processus.

Cet outil utilise quicktype-core pour effectuer la conversion localement dans le navigateur. quicktype est un générateur de structures multilingue ; cet outil active les options just-types et no-comments pour Swift, donc la sortie est des déclarations de propriétés struct/class propres sans annotations de sérialisation telles que Codable, Decodable ou Encodable, et sans instructions import ni commentaires d'en-tête. Ces « types nus » permettent aux développeurs d'ajouter librement des protocoles, d'ajuster le contrôle d'accès ou de modifier les conventions de nommage selon les préférences des frameworks réseau comme Alamofire / Moya.

Le système de types de Swift est réputé pour sa sécurité. struct est un type valeur, adapté pour représenter des données immuables ; class est un type référence, adapté aux scénarios nécessitant un état partagé ou de l'héritage. Les propriétés générées par cet outil sont mappées aussi fidèlement que possible vers String, Int, Double, Bool, [T], types personnalisés, etc., de Swift. Après génération, les développeurs peuvent modifier certains champs en Optional (?) selon les besoins métier, ajouter le protocole Codable aux types, ou promouvoir un struct entier en class pour obtenir une sémantique de référence.

La gestion des objets imbriqués est une capacité clé de l'outil. Lorsque le JSON contient des objets imbriqués, l'outil génère récursivement des sous-types indépendants ; par exemple, lorsque Root contient un objet address, un type Address est généré, et le type principal le référence via var address: Address. Cela évite les définitions de types dupliquées et permet à l'autocomplétion et à la vérification de types de Xcode de suivre correctement les relations hiérarchiques. La règle de nommage capitalise la première lettre du nom du champ ; par exemple, les éléments d'un tableau users sont nommés User.

L'inférence de types de tableau suit une stratégie « inférer par le premier élément ». Si les éléments du tableau sont des chaînes, [String] est généré ; si des entiers, [Int] ; si des nombres à virgule flottante, [Double] ; si des objets, [type personnalisé]. Les tableaux vides [] manquent d'échantillons, donc [Any] ou un type de secours est généré ; après génération, il est recommandé de les remplacer par des types concrets selon le métier réel. Pour les tableaux particulièrement volumineux ou creux, il est recommandé de placer des éléments d'exemple réels dans le JSON source pour améliorer la précision de l'inférence.

Le traitement pur en frontend est l'avantage architectural central de cet outil. Toute l'analyse JSON et la génération de code Swift s'exécutent en JavaScript du navigateur (y compris quicktype-core dans un Web Worker), indépendamment des services backend, et aucune donnée n'est envoyée à un serveur. Cette conception protège les données JSON pouvant contenir des informations sensibles et garantit que la vitesse de conversion n'est limitée que par les performances de l'appareil local, sans attendre les allers-retours réseau. C'est particulièrement important lors du traitement de JSON contenant des clés API ou des champs métier non publiés.

Contrairement à certains outils en ligne qui lient de force les stratégies de décodage Codable / CodingKeys / Date, cet outil adhère à un principe de sortie minimale : les membres de l'équipe ont souvent des préférences différentes sur les protocoles, la nommage et le contrôle d'accès, et cet outil laisse les choix de protocoles et de stratégies aux développeurs pour les affiner par projet. Ce flux de travail « générer un semi-fini + traitement secondaire au niveau du projet » est généralement plus populaire auprès des ingénieurs dans les équipes moyennes et grandes que les solutions « tout en un clic ».

Cas d'utilisation

  • Développement iOS : convertir le JSON renvoyé par les API REST backend en structs Swift pour la modélisation de couche réseau SwiftUI ou UIKit et le décodage JSONDecoder
  • Développement macOS : convertir le JSON de configuration d'application en types Swift pour une lecture de configuration avec sécurité de types dans les projets AppKit, évitant les fautes de frappe
  • Développement watchOS : convertir le JSON de données de santé et de fitness en modèles Swift pour les applications Apple Watch, en s'intégrant avec SwiftUI et HealthKit
  • Développement tvOS : convertir le JSON d'API de recommandation de contenu en types Swift pour l'affichage des données de la page d'accueil des applications TV et la navigation par focus
  • Modélisation MVVM SwiftUI : lier les modèles de données d'API directement en tant que propriétés @Published aux ViewModels, pilotant les vues de l'interface
  • Flux de données réactifs Combine : utiliser les types de réponse JSON comme types de sortie de Publisher, en travaillant avec JSONDecoder pour l'analyse réactive
  • Pré-modélisation SwiftData / Core Data : générer d'abord des structs Swift, puis ajouter manuellement des annotations @Model ou @NSManaged pour le mappage d'entités
  • Intégration de SDK tiers : convertir les exemples de réponse JSON de la documentation SDK en types Swift pour une intégration rapide avec les SDK de connexion, paiement, notifications push, cartes, etc.
  • Préparation de tests unitaires : convertir le JSON mock d'interface en types Swift pour les données de test XCTest et les assertions, améliorant la maintenabilité des tests
  • Revue de code : convertir le JSON de réponse d'API en types Swift pour faciliter les discussions d'équipe en Code Review sur la nommage des champs et l'optionalité
  • Développement hybride Flutter / React Native : préparer des modèles de données pour appeler des modules Swift natifs, réduisant les erreurs de conversion de types au niveau du pont
  • Migration d'API backend : générer des modèles client Swift à partir de la documentation d'API REST ou d'exemples JSON Postman, permettant une synchronisation rapide lors des mises à niveau de version
  • Enseignement et formation : démontrer le mappage JSON-vers-système de types dans les cours Swift/iOS pour aider les étudiants à comprendre la modélisation de données d'API et la sécurité des types
  • Applications de santé et fitness : convertir le JSON renvoyé par HealthKit/Fitbit et des API similaires en types Swift pour la modélisation de données Apple Health
  • Applications de paiement et finance : convertir le JSON de réponse d'API de passerelles de paiement en modèles Swift pour la réconciliation et la gestion des exceptions
  • Systèmes de commandes e-commerce : convertir le JSON de commandes, produits, adresses, etc., en structs Swift pour une utilisation avec les listes SwiftUI et les pages de détail
  • Applications d'actualités et de contenu : convertir les réponses JSON de systèmes de gestion de contenu en types Swift pour TableView / listes SwiftUI / pages de détail
  • Développement serveur Vapor : convertir le JSON de requête/réponse d'API backend en structs Swift pour les définitions de modèles côté serveur et l'encodage/décodage Codable
  • MapKit et données géographiques : convertir le JSON renvoyé par les API de cartes en structs Swift pour la recherche de lieux, la planification d'itinéraires et la modélisation de résultats de géocodage

Comment utiliser

  1. Collez du contenu JSON dans l'éditeur de gauche, ou cliquez sur le bouton de téléversement pour sélectionner un fichier .json / .txt, ou chargez des données d'exemple intégrées
  2. Après un debounce de 400 ms, l'outil appelle automatiquement quicktype-core pour la conversion ; le côté droit affiche le code struct / class Swift généré
  3. Si le JSON est mal formé, cliquez sur le bouton « Réparer JSON » pour réparer automatiquement les problèmes de syntaxe courants (virgules finales, guillemets simples, guillemets manquants, etc.)
  4. Vérifiez le résultat généré ; vous pouvez ajouter manuellement des protocoles Codable / Equatable / Identifiable et autres selon les besoins de votre projet. Cliquez sur « Copier » pour coller dans Xcode, ou sur « Télécharger » pour enregistrer en tant que fichier .swift

Fonctionnalités

  • Conversion pure dans le navigateur : l'analyse JSON et la génération de code Swift s'effectuent via quicktype-core dans le navigateur ; ni le JSON brut ni le code généré ne sont envoyés à un serveur
  • Mode quicktype-core just-types : la sortie est des déclarations de propriétés struct/class Swift propres, sans imports, sans annotations Codable/CodingKeys ni commentaires, prêtes à être personnalisées pour votre projet
  • Conversion automatique avec debounce de 400 ms : après avoir collé ou modifié du JSON, les types Swift sont générés presque instantanément sans cliquer plusieurs fois sur un bouton ; la conversion est entièrement asynchrone et ne bloque jamais l'interface
  • Exécution en arrière-plan avec Web Worker : quicktype-core s'exécute dans un Web Worker du navigateur, empêchant le thread principal de se figer et l'éditeur de ralentir lors de conversions de JSON volumineux
  • Inférence de types intelligente : mappe automatiquement String, Int, Double, Bool, [T] et types personnalisés ; les tableaux sont inférés à partir du type du premier élément — pas besoin d'écrire manuellement les types de champs
  • Expansion automatique des objets imbriqués : génère récursivement des types Swift indépendants pour chaque objet imbriqué, nommés en capitalisant la première lettre du nom du champ, évitant les définitions de types dupliquées
  • Inférence automatique des types de tableau : les tableaux JSON sont automatiquement convertis en [String] / [Int] / [Double] / [type personnalisé] ; les tableaux vides génèrent par défaut [Any]
  • Réparation d'erreurs JSON en un clic : lorsque des erreurs de formatage courantes sont détectées — virgules finales, guillemets simples, guillemets manquants, commentaires, etc. — elles peuvent être réparées automatiquement en un clic et la conversion continue
  • Copie en un clic + téléchargement .swift : copiez le code Swift généré dans votre presse-papiers, ou téléchargez-le en tant que fichier .swift à glisser directement dans votre projet Xcode
  • Données d'exemple + téléchargement de fichiers : JSON d'exemple intégré de style Swift (avec address / company / tags imbriqués) ; prend en charge le glisser-déposer ou le clic pour téléverser des fichiers .json / .txt
  • Historique d'entrée localStorage : sauvegarde automatiquement votre saisie récente ; après actualisation ou fermeture accidentelle de la page, vous pouvez reprendre l'édition rapidement sans perdre de contenu
  • Éditeur responsive en écran partagé : aperçu en direct dans une disposition divisée gauche/droite, s'adaptant au bureau et au mobile ; fonctionnement fluide même sur petits écrans

Exemples de code

Swift : Analyse de structs générés avec URLSession + JSONDecoder

swift

L'utilisation la plus courante dans les projets iOS / macOS : ajoutez Codable aux structs générés par cet outil, puis récupérez de manière asynchrone avec URLSession et décodez avec JSONDecoder.

import Foundation

// 1) Type racine généré par cet outil (avec protocole Codable ajouté)
struct User: Codable {
    let id: Int
    let name: String
    let email: String
    let isActive: Bool
    let tags: [String]
}

// 2) Récupération et décodage asynchrones 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) Exemple d'utilisation (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 : Désérialisation de types générés avec Alamofire responseDecodable

swift

Lors de l'utilisation d'Alamofire, vous pouvez utiliser directement responseDecodable pour décoder automatiquement les structs générés par cet outil en objets Swift.

import Foundation
import Alamofire

// Type généré par cet outil, utilisable directement après ajout de 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
    }

    /// responseDecodable style Alamofire 5 async/await
    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)
                    }
                }
        }
    }
}

// Exemple d'appel style Moya
// provider.request(.product(id: 1)).map(Product.self)
// let product: Product = try await provider.request(.product(id: 1)).map(Product.self)

Swift : Analyse réactive avec Combine + JSONDecoder

swift

Dans les projets SwiftUI / Combine, vous pouvez utiliser les structs générés avec dataTaskPublisher / decode pour des flux de données réactifs.

import Foundation
import Combine

// Type racine généré par cet outil
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
    }

    /// Exposer le flux de données avec 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()
    }

    /// S'abonner dans 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

FAQ

Comment convertir du JSON en struct Swift ?

Collez votre contenu JSON dans la zone de saisie de gauche. Après un debounce de 400 ms, l'outil appelle automatiquement quicktype-core pour le convertir en code Swift et affiche le résultat dans le panneau de droite en temps réel. Vous pouvez également cliquer sur le bouton de téléversement pour sélectionner un fichier .json / .txt, ou cliquer sur le bouton d'exemple pour charger des données intégrées. Une fois la conversion terminée, vous pouvez copier le résultat ou le télécharger en tant que fichier .swift en un clic.

Le code Swift généré inclut-il Codable ?

Par défaut, non. Cet outil utilise le mode just-types de quicktype-core, qui génère des déclarations de propriétés struct/class pures sans annotations Codable, Decodable ou Encodable, et sans instructions import. Si vous avez besoin de Codable, ajoutez simplement : Codable après génération (par ex. struct User: Codable {}), ou écrivez votre propre logique d'analyse avec JSONDecoder.

Quelles structures de données JSON sont prises en charge ?

Tout JSON valide est pris en charge : types de base (null, boolean, number, string), tableaux unidimensionnels ou multidimensionnels et objets imbriqués de profondeur arbitraire. L'entrée racine peut être un objet JSON ou un tableau JSON ; l'outil priorise les objets et infère les tableaux par leur premier élément. Les entrées non prises en charge incluent les valeurs spéciales JavaScript (fonctions, Symbol, undefined) et le texte non-JSON.

Comment les objets JSON imbriqués sont-ils gérés ?

L'outil génère récursivement des types Swift indépendants pour chaque objet imbriqué. Les noms sont basés sur une combinaison du nom du type parent et du nom du champ ; par exemple, si Root contient un champ address, un sous-type Address est généré, et le type principal le référence via var address: Address. Cela évite les définitions de types dupliquées et permet à l'autocomplétion et à la vérification de types de Xcode de suivre correctement les relations hiérarchiques.

Les champs de tableau deviennent-ils des tableaux Swift ?

Oui. Les tableaux JSON sont automatiquement convertis en forme [T] de Swift. Si les éléments du tableau sont des chaînes, [String] est généré ; si des entiers, [Int] ; si des nombres à virgule flottante, [Double] ; si des objets, [type personnalisé]. Les tableaux vides [] n'ont pas d'éléments d'exemple, donc [Any] est généré par défaut ; après génération, il est recommandé de le remplacer manuellement par un type concret comme [String] ou [Int].

Quel type est généré pour les champs de valeur null ?

Les valeurs null dans JSON ne peuvent pas avoir leur type concret inféré ; l'outil peut générer Any ou un type de secours. Il est recommandé de remplacer les champs avec une valeur null dans le JSON source par des valeurs d'exemple (par ex. "field": "" infère String) ou de les changer manuellement en Optional selon votre logique métier (par ex. var phone: String?), ce qui correspond mieux à la sémantique de sécurité du système de types de Swift.

Puis-je personnaliser le nom du struct généré ?

Oui. Cliquez sur le bouton du nom de type (ou l'entrée des paramètres) dans la barre d'outils pour modifier le nom du type racine (la valeur par défaut est Root ou inférée à partir des données d'exemple). Les noms des sous-types sont générés automatiquement en fonction du nom racine et des noms de champs ; la règle de nommage est de capitaliser la première lettre du nom du champ, par ex. users → User, tags → Tag.

Que faire si mon JSON est mal formé ?

L'outil détecte automatiquement la validité du JSON ; en cas d'erreur, il affiche un message d'erreur spécifique à droite et fournit un bouton « Réparer JSON ». En cliquant dessus, les erreurs courantes sont automatiquement réparées : virgules finales, guillemets simples remplacés par des guillemets doubles, guillemets manquants sur les clés, suppression de commentaires, etc. Après une réparation réussie, vous pouvez continuer la conversion sans corriger manuellement le JSON.

Mes données sont-elles envoyées à un serveur ? Sont-elles privées et sécurisées ?

Cela s'exécute entièrement dans votre navigateur. Toute l'analyse JSON et la génération de code Swift s'effectuent localement via JavaScript du navigateur (y compris quicktype-core dans un Web Worker) ; le JSON que vous saisissez et le code Swift généré ne sont jamais envoyés à un serveur, ni enregistrés ni mis en cache dans le cloud. Le JSON sensible contenant des clés API, des tokens, des champs de confidentialité utilisateur ou des structures métier non publiées peut être utilisé en toute sécurité — la fermeture de la page efface tout.

Le code généré peut-il être utilisé directement dans un projet Xcode ?

Oui. Le code généré est une syntaxe Swift standard et peut être directement copié dans un fichier .swift de Xcode, ou enregistré en tant que fichier .swift via le bouton « Télécharger » et glissé dans votre projet. Comme la sortie est des déclarations de types pures, il est recommandé d'ajouter manuellement des protocoles tels que Codable, Equatable, Identifiable selon les besoins, ou d'ajuster les modificateurs de contrôle d'accès (public / internal / private).

Les tableaux JSON sont-ils pris en charge comme entrée racine ?

Oui. Lorsque l'entrée racine est un tableau JSON, l'outil utilise le premier élément du tableau comme modèle pour générer un type d'élément et génère la définition de ce type d'élément. Par exemple, [{"id":1,"name":"A"}] génère un struct nommé Item (ou un nom inféré à partir des champs) dont les champs sont ceux du premier élément ; le type principal le référence via une propriété items: [Item], évitant de traiter le tableau directement comme type racine.

La conversion de JSON volumineux causera-t-elle des ralentissements ?

Il n'y a pas de limite de taille explicite, mais le navigateur ralentira lors de l'analyse et du rendu de JSON très volumineux. Recommandations : ① Convertissez le JSON d'un seul module métier à la fois ; ② Divisez les niveaux d'imbrication profonds et traitez séparément ; ③ Pour le JSON de plus de quelques Mo, vous pouvez utiliser la version en ligne de commande de quicktype ; ④ Diviser le même JSON en plusieurs sous-modules et les convertir séparément peut réduire considérablement l'utilisation de la mémoire.

JSON vers Swift et JSON vers TypeScript peuvent-ils être utilisés de manière interchangeable ?

Les deux convertissent du JSON en définitions de types pour leurs langages respectifs, mais leur objectif diffère : JSON vers Swift génère des déclarations de propriétés struct/class pour les applications natives iOS/macOS ; JSON vers TypeScript génère des déclarations interface/type pour la vérification de types frontend. Si votre projet a à la fois un client iOS et un frontend Web, il est recommandé de générer les versions Swift et TS à partir du même JSON pour garantir la cohérence des types des deux côtés.

Comment ajouter le protocole Codable au code généré ?

Cet outil génère des types purs par défaut sans protocoles. Après génération, il vous suffit d'ajouter : Codable après la déclaration struct/class, par ex. struct User: Codable {}, et JSONDecoder peut l'utiliser. Si vous voulez Codable par défaut, vous pouvez forker quicktype-core et modifier son moteur de rendu Swift, ou utiliser le remplacement par lot de Xcode pour ajouter le protocole à tous les types après génération.

Nécessite-t-il Internet ? Puis-je l'utiliser sur mobile ?

La première visite nécessite Internet pour charger les scripts de l'outil et les ressources quicktype-core ; ensuite, il peut s'exécuter hors ligne depuis le cache du navigateur (dans un navigateur déjà visité). Les navigateurs mobiles (iOS Safari, Android Chrome) fonctionnent également normalement ; l'interface utilise une conception en écran partagé responsive qui passe automatiquement en empilement haut-bas en orientation portrait.

Après génération, puis-je modifier un type individuel sans casser les autres ?

Oui. Après génération, chaque type Swift est un struct/class indépendant ; la sortie de l'outil est du texte brut. Vous pouvez copier individuellement un seul type et le coller dans Xcode, ou utiliser la refactorisation Rename de Xcode pour modifier par lots les types et les champs sans affecter les autres types. Si vous avez besoin de régénérer tout le groupe de types, actualisez simplement la page et collez à nouveau le JSON.

L'inférence d'enum Swift est-elle prise en charge ?

La prise en charge de quicktype pour les unions/enums nécessite des indications de type supplémentaires ou une entrée GraphQL/JSON Schema. Inférer des enums à partir de seuls échantillons JSON est difficile, donc cet outil ne génère pas d'enums par défaut. Si vous avez besoin d'enums, vous pouvez modifier manuellement le struct correspondant en enum + Codable, ou utiliser d'abord un outil JSON vers Kotlin/TypeScript pour obtenir des types enum puis les migrer manuellement vers Swift.

Dépannage

Affiche « Veuillez saisir des données JSON » ou le côté droit est vide

La zone de saisie de gauche est vide ou ne contient que des espaces. Collez du contenu JSON valide, ou cliquez sur « Exemple » pour charger un exemple, ou sur « Téléverser » pour sélectionner un fichier .json / .txt.

Affiche « Unexpected token ... in JSON »

Le JSON est mal formé. Causes courantes : ① virgule finale (par ex. {"a":1,}) ; ② guillemets simples utilisés au lieu de guillemets doubles ; ③ syntaxe d'objet JS (par ex. {key: value}) au lieu de JSON (par ex. {"key": "value"}) ; ④ contient des commentaires JavaScript. En cliquant sur le bouton « Réparer JSON », certaines erreurs courantes peuvent être automatiquement réparées.

Les types générés manquent de Codable et ne peuvent pas être utilisés directement avec JSONDecoder

Ceci est le comportement attendu. Cet outil utilise le mode just-types et génère des déclarations de propriétés struct/class pures. Si vous avez besoin de Codable, ajoutez : Codable aux types après génération (par ex. struct User: Codable {}), ou écrivez extension User: Codable {} avant d'appeler JSONDecoder.

Tableau vide [] a généré [Any]

Les tableaux vides n'ont pas d'éléments d'exemple, donc l'outil génère le type de secours [Any]. Il est recommandé de placer au moins un élément d'exemple dans le JSON source (par ex. [1, 2]), de supprimer la valeur d'exemple après génération et de spécifier manuellement un type concret ; ou de passer directement à un type plus précis comme [String] / [User] après génération.

Le type de champ avec valeur null est incertain

JSON null ne peut pas avoir son type concret inféré ; l'outil peut générer Any ou un type de secours. Il est recommandé de remplacer null dans le JSON source par une valeur d'exemple représentative (par ex. "" ou 0), puis de changer ce champ en Optional (?) ou un type concret après génération, par ex. var phone: String?.

Les noms de types générés ne correspondent pas aux conventions du projet

Vous pouvez modifier le nom du type racine dans la barre d'outils ; les noms des sous-types sont générés automatiquement en fonction du nom racine + des noms de champs. Si vous n'êtes toujours pas satisfait, utilisez la refactorisation Rename de Xcode pour modifier par lots après génération (clic droit → Refactor → Rename) ; Xcode synchronisera les mises à jour de toutes les références.

La page ralentit après conversion de JSON volumineux

Le navigateur ralentit lors du rendu de JSON très volumineux et de la génération de nombreux types. Il est recommandé de diviser le JSON en plusieurs modules métier indépendants et de convertir séparément, ou d'extraire uniquement les objets clés nécessitant une modélisation ; pour le JSON de plus de 10 Mo, nous recommandons la version en ligne de commande de quicktype.

Erreur de compilation Xcode : « Type 'X' does not conform to protocol 'Decodable' »

Cela signifie que vous avez ajouté Codable à certains champs mais n'avez pas correctement géré les types Optional / Date / Enum. Corrections courantes : ① Passez tous les champs pouvant être null à Optional<T> ; ② Personnalisez la stratégie de dates avec JSONDecoder().dateDecodingStrategy = .iso8601 ; ③ Personnalisez CodingKeys pour aligner les clés JSON avec les noms de propriétés Swift.

Les noms de champs sont en snake_case mais la convention Swift est camelCase

Cet outil conserve les noms originaux des champs JSON par défaut, donc les champs snake_case sont générés tels quels. Si vous voulez unifier en camelCase, vous pouvez renommer par lots en utilisant Rename de Xcode après génération, ou convertir les noms de champs en camelCase dans un moteur de rendu quicktype personnalisé, puis ajouter des mappages CodingKeys pour assurer un décodage JSON correct.

Le fichier .swift téléchargé donne des erreurs avec des clés chinoises à l'ouverture dans Xcode

Swift recommande des noms de champs comme identifiants ASCII en anglais. Si le JSON source contient des clés chinoises (par ex. {"姓名": "Alice"}), le var 姓名: String généré provoquera des erreurs du compilateur Swift dans certaines anciennes versions. Il est recommandé de modifier les clés en anglais (par ex. name) dans le JSON source, ce qui est plus conforme aux normes de codage Swift.

Les types n'ont que var, pas de contrôles let / private

Cet outil génère des propriétés var public par défaut pour faciliter le post-traitement. Si vous voulez let ou un contrôle d'accès (par ex. private(set)), vous pouvez modifier par lots en utilisant Refactor de Xcode → Add Access Control, ou remplacer var par let en utilisant sed / un outil d'édition de texte après génération.

Le JSON contient des chaînes de date ISO 8601, le champ Date généré échoue au décodage

Cet outil mappe les chaînes ISO 8601 à String par défaut ; Swift ne les convertit pas automatiquement en Date. Vous devez définir dateDecodingStrategy dans JSONDecoder, par ex. JSONDecoder().dateDecodingStrategy = .iso8601. Si le format de date n'est pas standard, vous devrez également implémenter manuellement un DateFormatter ou une logique d'analyse personnalisée.

L'imbrication est trop profonde, conflits de noms

L'outil nomme les sous-types par « capitaliser la première lettre du nom de champ ». Le JSON profondément imbriqué peut avoir des objets imbriqués portant le même nom et causer des conflits de types. Solutions : ① Ajoutez des préfixes métier aux champs dans le JSON source ; ② Divisez le JSON racine en plusieurs modules indépendants et générez séparément ; ③ Utilisez Rename de Xcode pour modifier par lots les noms de types en conflit après génération.

Un public struct a été généré mais le projet utilise l'isolation de modules

Cet outil génère internal struct par défaut sans modificateur public explicite. Si votre projet est divisé par modules et nécessite un accès inter-modules, vous devez remplacer par lots struct par public struct dans Xcode, ou ajouter uniformément le mot-clé public à l'aide de scripts sed/awk après génération.

Glossaire

struct
Un type valeur dans Swift. Adapté par défaut pour représenter des modèles de données immuables ; les valeurs sont copiées lors de l'affectation. Cet outil génère des structs par défaut pour représenter des objets JSON.
class
Un type référence dans Swift. Adapté aux scénarios nécessitant un état partagé, de l'héritage ou une identité (===). Cet outil peut générer des classes sous certaines configurations.
Optional (?)
Un modificateur de type dans Swift indiquant qu'une valeur peut être nil, par ex. var name: String?. Les champs générés par cet outil sont non-Optional par défaut ; vous pouvez ajouter ? manuellement après génération selon si un champ JSON peut être absent.
Array ([T])
Abréviation pour les types de tableau dans Swift. Cet outil convertit les tableaux JSON en [T], où T est inféré à partir des types d'éléments du tableau, par ex. [String], [Int] ou [type personnalisé].
Codable
Une combinaison de protocoles de Decodable et Encodable dans Swift. Après avoir implémenté Codable, JSONDecoder peut analyser des données JSON en instances de types. Cet outil ne génère pas Codable par défaut ; il doit être ajouté manuellement.
JSONDecoder
Un analyseur JSON dans le framework Foundation. Utilisé avec le protocole Codable pour convertir Data en instances de types Swift. Une fois que cet outil a généré des types purs, les développeurs peuvent utiliser JSONDecoder pour analyser.
URLSession
L'API réseau du framework Foundation d'Apple. L'utilisation courante est URLSession.shared.data(from: url), qui associée à JSONDecoder complète l'intégration d'API.
Alamofire
La bibliothèque réseau HTTP tierce la plus populaire de la communauté Swift. Construite sur URLSession, elle prend en charge responseDecodable pour désérialiser directement en types Swift.
Moya
Une couche d'abstraction réseau Swift, généralement associée à Alamofire. Moya combiné à des types Codable peut simplifier considérablement le code répétitif des appels API.
Vapor
Le framework serveur principal pour Swift, utilisé pour construire des applications Web sur macOS / Linux. Les structs Swift générés par cet outil peuvent également être utilisés pour les modèles de routes Vapor.
quicktype
Un outil générateur de types multilingue open source. Cet outil effectue la conversion JSON vers Swift via quicktype-core dans un Web Worker du navigateur.
Property
Une déclaration de propriété dans un type Swift. Cet outil mappe chaque clé JSON à une propriété Swift ; par ex. "name": "Alice" est mappé à var name: String.
Type Inference
Le processus d'inférence automatique des types Swift à partir de la forme littérale des valeurs JSON. Cet outil mappe en fonction de null, boolean, number, string, array et object.
localStorage
Stockage clé-valeur local du navigateur. Cet outil utilise localStorage pour sauvegarder l'historique des saisies récentes pour une récupération après actualisation ou fermeture accidentelle.
Web Worker
Un mécanisme de thread d'arrière-plan fourni par le navigateur. Cet outil charge et exécute quicktype-core via un Web Worker pour empêcher les conversions de JSON volumineux de bloquer le thread principal.
SwiftUI
Le framework d'interface utilisateur déclaratif d'Apple. Les types Swift générés par cet outil peuvent servir de modèles de données pour les vues SwiftUI, pilotant l'interface avec @State / @ObservedObject.
Combine
Le framework de programmation réactive d'Apple. Les types Swift générés combinés à JSONDecoder peuvent construire des flux de données réactifs dataTaskPublisher.
SwiftData
Le framework de persistance de données d'Apple introduit en 2023. Les types générés par cet outil peuvent servir de classes de base de modèles SwiftData ; l'ajout de @Model les rend gérables par SwiftData.
Value Type / Reference Type
Dans Swift, struct est un type valeur et class est un type référence. Cet outil génère struct par défaut, qui est copié lors de l'affectation ; si une sémantique de référence est nécessaire, vous pouvez passer manuellement à class.
Field Naming
Cet outil conserve les noms de champs JSON d'origine par défaut. Si le JSON source utilise snake_case et que le projet nécessite camelCase, vous devez renommer manuellement ou personnaliser le moteur de rendu quicktype.
ISO 8601 Date
Un format de date JSON courant, par ex. 2026-07-14T10:00:00Z. Nécessite JSONDecoder.dateDecodingStrategy = .iso8601 pour analyser correctement en types Date.

Tableau de correspondance rapide des types JSON vers types Swift

L'outil infère automatiquement les types Swift correspondants en fonction de la forme des valeurs JSON :

Exemple de valeur JSONMéthode de détectionType Swift généréNotes
nullvalue === nullAny? ou Optional concretImpossible d'inférer un type concret ; recommandez de passer manuellement à Optional<T> après génération
true / falsetypeof value === 'boolean'BoolMappé directement au type Bool de Swift
42typeof value === 'number' && Number.isInteger(value)IntLes entiers sont mappés à Int (32/64 bits déterminé par la plateforme)
3.14typeof value === 'number' && !Number.isInteger(value)DoubleLes nombres à virgule flottante sont mappés à Double
"hello"typeof value === 'string'StringLes chaînes sont mappées à String
[] (tableau vide)Array.isArray(value) && value.length === 0[Any]Impossible d'inférer le type d'élément ; recommandez d'ajouter un exemple ou de passer manuellement à un type concret
["a", "b"]Array.isArray(value) && typeof value[0] === 'string'[String]Tableau de chaînes
[1, 2, 3]Array.isArray(value) && typeof value[0] === 'number'[Int]Tableau d'entiers
[1.5, 2.5]Array.isArray(value) && typeof value[0] === 'number' && !Number.isInteger(value[0])[Double]Tableau de flottants
[{...}, {...}]Array.isArray(value) && typeof value[0] === 'object'[Item]Tableau d'objets, les éléments sont des types personnalisés, noms inférés des noms de champs
{...} (objet imbriqué)typeof value === 'object' && !Array.isArray(value)struct / class indépendantGénère récursivement des types indépendants, nommés en capitalisant les noms de champs

Cas d'utilisation courants de JSON vers Swift dans l'écosystème Apple

Les types Swift générés peuvent être utilisés directement dans différents scénarios sur les plateformes Apple / frameworks tiers :

Cas d'utilisationFrameworks courantsProtocole / Traitement à ajouterFragment de code typique
Analyse d'API RESTURLSession + JSONDecoderAjoutez Codable aux types, conservez la sémantique de valeur structtry JSONDecoder().decode(User.self, from: data)
Requêtes HTTP simplifiéesAlamofireAjoutez Codable aux types, utilisez avec responseDecodablesession.request(url).responseDecodable(of: User.self)
Couche réseau abstraiteMoyaAjoutez Codable aux types ; Moya désérialise automatiquementprovider.request(.user(id: 1)).map(User.self)
Flux de données réactifsCombine + JSONDecoderAjoutez Codable aux types, combinez avec dataTaskPublisherURLSession.shared.dataTaskPublisher(for: url).decode(type: User.self, decoder: decoder)
Affichage de listes SwiftUISwiftUI List + IdentifiableAjoutez Identifiable aux types pour le forEach automatique de ListList(items) { Text($0.name) }
Définition de modèles serveurVaporAjoutez Codable aux types ; sérialisation Content automatique de Vaporstruct User: Codable, Content { var id: Int; var name: String }
Modèle de persistance localeSwiftData / Core DataAjoutez @Model / @NSManaged sur les struct / class générés@Model class User { var id: Int; var name: String }
Partage de types multiplateformeJSON vers Swift + JSON vers TypeScript combinésConservez la cohérence des noms de champs Swift et TS ; le côté TS utilise les types TSSwift: var name: String / TS: name: string

Privacy & Security

Cet outil JSON vers Swift effectue toutes les opérations d'analyse JSON et de génération de types Swift entièrement dans votre navigateur via JavaScript (quicktype-core / Web Worker). Les données JSON que vous saisissez et le code Swift généré ne sont jamais envoyés à un serveur, ni enregistrés, mis en cache ou stockés dans le cloud. Le JSON sensible contenant des champs d'API internes, des clés API, des tokens, des données de confidentialité utilisateur ou des structures métier non publiées peut être utilisé en toute sécurité ; tout le contenu d'entrée et de sortie est automatiquement effacé de la mémoire lorsque vous fermez ou actualisez la page, sans dépendre de services réseau tiers.

Authoritative References