Travailler avec JSON en Swift : analyse et sérialisation des données

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

Travailler avec JSON en Swift : parsing et sérialisation



JSON (JavaScript Object Notation) est devenu le standard de facto pour l'échange de données entre le client et le serveur dans les applications mobiles et de bureau. Dans l'écosystème Swift (iOS/macOS), le travail avec JSON est implémenté au plus haut niveau — de la simple JSONSerialization au puissant protocole Codable. Dans cet article, nous allons passer en revue toutes les principales méthodes de parsing et de sérialisation JSON en Swift, fournir des exemples pratiques et montrer comment éviter les erreurs typiques.



1. Bases du travail avec JSON en Swift : JSONSerialization



Avant l'arrivée de Swift 4, l'outil principal pour travailler avec JSON était la classe JSONSerialization, faisant partie de Foundation. Elle permet de convertir des données JSON en objets Swift (dictionnaires, tableaux, chaînes, nombres) et vice versa. Cette méthode reste pertinente si vous avez besoin d'un contrôle total sur le processus ou si vous travaillez avec du code hérité.



Parsing JSON avec JSONSerialization



Supposons que nous ayons reçu une chaîne JSON du serveur :



let jsonString = """{    "name": "Иван",    "age": 30,    "isPremium": true,    "hobbies": ["чтение", "бег", "программирование"]}"""

guard let jsonData = jsonString.data(using: .utf8) else { fatalError("Ошибка кодирования строки в Data")}

do { if let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] { let name = jsonObject["name"] as? String ?? "" let age = jsonObject["age"] as? Int ?? 0 let isPremium = jsonObject["isPremium"] as? Bool ?? false let hobbies = jsonObject["hobbies"] as? [String] ?? [] print("Имя: \\(name), Возраст: \\(age), Премиум: \\(isPremium), Хобби: \\(hobbies)") }} catch { print("Ошибка парсинга JSON: \\(error.localizedDescription)")}


L'inconvénient de cette approche est la nécessité de convertir manuellement les types et de gérer les valeurs optionnelles. Le code devient lourd et sujet aux erreurs.



Sérialisation en JSON avec JSONSerialization



Le processus inverse — transformer un dictionnaire Swift en données JSON :



let personDict: [String: Any] = [    "name": "Мария",    "age": 25,    "isPremium": false,    "hobbies": ["рисование", "йога"]]

do { let jsonData = try JSONSerialization.data(withJSONObject: personDict, options: .prettyPrinted) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }} catch { print("Ошибка сериализации: \\(error.localizedDescription)")}


L'option .prettyPrinted rend la sortie lisible pour l'homme. Pour la production, on utilise généralement [] (sans formatage) pour économiser le trafic.



2. Approche moderne : le protocole Codable et JSONDecoder



Depuis Swift 4, le travail avec JSON est devenu beaucoup plus simple grâce au protocole Codable (qui combine Encodable et Decodable). Vous décrivez simplement la structure des données, et le compilateur génère automatiquement le code pour l'encodage/décodage.



Parsing JSON avec JSONDecoder



Définissons un modèle pour notre JSON :



struct Person: Codable {    let name: String    let age: Int    let isPremium: Bool    let hobbies: [String]}

let jsonString = """{ "name": "Иван", "age": 30, "isPremium": true, "hobbies": ["чтение", "бег", "программирование"]}"""

guard let jsonData = jsonString.data(using: .utf8) else { fatalError("Ошибка кодирования строки")}

do { let person = try JSONDecoder().decode(Person.self, from: jsonData) print("Имя: \\(person.name), Возраст: \\(person.age), Премиум: \\(person.isPremium), Хобби: \\(person.hobbies)")} catch { print("Ошибка декодирования: \\(error.localizedDescription)")}


Comme vous pouvez le voir, le code est devenu beaucoup plus propre. Toutes les conversions de types et vérifications

Blogs

Book Recommendations