Traitement JSON en Swift : Codable, Foundation et SwiftyJSON pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Traitement JSON en Swift (iOS/macOS) : guide complet



JSON (JavaScript Object Notation) est l'un des formats d'échange de données les plus populaires dans les applications modernes. Dans l'écosystème Apple (iOS, macOS, watchOS, tvOS), Swift offre plusieurs méthodes puissantes pour travailler avec JSON. Dans cet article, nous allons examiner trois approches principales : le natif Codable, le bas niveau JSONSerialization et la bibliothèque tierce populaire SwiftyJSON. Vous apprendrez à analyser, créer et traiter du JSON en Swift avec des exemples de code.



1. Codable — le standard moderne de Swift



Depuis Swift 4, Apple a introduit les protocoles Codable (combinant Encodable et Decodable). C'est la manière la plus pratique et la plus sûre de travailler avec JSON. Il vous suffit de déclarer une structure ou une classe conforme à Codable, et d'utiliser JSONEncoder/JSONDecoder.



Exemple : analyse d'un JSON à partir d'une réponse API



import Foundation

// Définir le modèle, automatiquement conforme à Codablestruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

// Exemple de chaîne JSONlet jsonString = """{ "id": 42, "name": "Иван Петров", "email": "ivan@example.com", "isActive": true}"""

// Analyseif let jsonData = jsonString.data(using: .utf8) { let decoder = JSONDecoder() do { let user = try decoder.decode(User.self, from: jsonData) print("Utilisateur : \\(user.name), email : \\(user.email)") } catch { print("Erreur de décodage : \\(error.localizedDescription)") }}


Exemple : création de JSON à partir d'un objet



let user = User(id: 1, name: "Анна Смирнова", email: "anna@test.com", isActive: false)let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // pour un formatage agréable

if let jsonData = try? encoder.encode(user), let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString)}


Travail avec des structures imbriquées et des tableaux



struct Company: Codable {    let name: String    let employees: [User]}

let companyJson = """{ "name": "TechCorp", "employees": [ {"id": 1, "name": "Олег", "email": "oleg@tc.com", "isActive": true}, {"id": 2, "name": "Мария", "email": "maria@tc.com", "isActive": false} ]}"""

if let data = companyJson.data(using: .utf8), let company = try? JSONDecoder().decode(Company.self, from: data) { print("Entreprise : \\(company.name), employés : \\(company.employees.count)")}


2. JSONSerialization — l'approche classique (Foundation)



Avant l'arrivée de Codable, l'outil principal était JSONSerialization de Foundation. Il fonctionne avec les dictionnaires et les tableaux Foundation ([String: Any] et [Any]). Cette méthode est utile lorsque la structure JSON est inconnue à l'avance ou très dynamique.



Exemple : analyse avec JSONSerialization



if let data = jsonString.data(using: .utf8) {    do {        if let dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {            let id = dict["id"] as? Int ?? 0            let name = dict["name"] as? String ?? "Inconnu"            print("ID : \\(id), Nom : \\(name)")        }    } catch {        print("Erreur : \\(error)")    }}


Inconvénient : absence de sécurité de type — vous devez effectuer manuellement les conversions de type, ce qui peut entraîner des erreurs d'exécution. Il est recommandé d'utiliser Codable partout où c'est possible.



3. SwiftyJSON — une bibliothèque tierce pratique



SwiftyJSON est une bibliothèque open source populaire

Recommendations