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 ».