Travailler avec JSON en Swift : analyse et sérialisation pour débutants
\n\nJSON (JavaScript Object Notation) est le format d'échange de données le plus populaire dans les applications mobiles et web modernes. Si vous développez pour iOS ou macOS en Swift, savoir analyser et sérialiser du JSON est une compétence indispensable. Dans cet article, nous allons passer en revue toutes les méthodes principales pour travailler avec JSON : de la classique JSONSerialization au protocole moderne Codable. Ce contenu est destiné aux développeurs débutants qui connaissent déjà les bases de Swift.
Qu'est-ce que JSON et pourquoi en a-t-on besoin en Swift ?
\n\nJSON est un format textuel basé sur la syntaxe JavaScript. Il se compose de paires "clé-valeur", d'objets imbriqués et de tableaux. Dans le développement iOS, JSON est utilisé pour :
\n\n- \n
- Récupérer des données depuis des API REST \n
- Sauvegarder les configurations et paramètres de l'application \n
- Échanger des données entre les modules de l'application \n
- Travailler avec des bases de données (par exemple, Firebase ou CoreData + JSON) \n
En Swift, il existe deux approches principales pour travailler avec JSON : l'ancienne méthode via JSONSerialization (de Foundation) et la méthode moderne utilisant les protocoles Codable, Encodable et Decodable. Nous commencerons par la méthode plus simple JSONSerialization pour comprendre la mécanique, puis nous passerons au puissant Codable.
Analyse JSON avec JSONSerialization (Foundation)
\n\nJSONSerialization est une classe intégrée à Foundation qui convertit les données JSON en objets Swift (dictionnaires et tableaux). Cette méthode existe depuis les premières versions de Swift et est encore utilisée dans les projets hérités. Analysons un exemple.
Supposons que nous ayons une chaîne JSON contenant des informations sur un utilisateur :
\n\nlet jsonString = """\n{\n "name": "Иван",\n "age": 30,\n "email": "ivan@example.com",\n "isActive": true,\n "hobbies": ["чтение", "программирование", "спорт"]\n}\n"""\n\nPour analyser ce JSON, nous convertissons d'abord la chaîne en données Data, puis nous utilisons JSONSerialization :
import Foundation\n\nif let jsonData = jsonString.data(using: .utf8) {\n do {\n if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {\n print("Nom : \\(dictionary["name"] ?? "Aucune donnée")")\n print("Âge : \\(dictionary["age"] ?? "Aucune donnée")")\n if let hobbies = dictionary["hobbies"] as? [String] {\n print("Loisirs : \\(hobbies.joined(separator: ", "))")\n }\n }\n } catch {\n print("Erreur d'analyse JSON : \\(error.localizedDescription)")\n }\n}\n\nPoints importants :
\n- \n
- Utilisez toujours
try-catch— l'analyse peut générer une erreur. \n - Le résultat est de type
Any, il faut donc le convertir en un type spécifique ([String: Any]pour un objet,[Any]pour un tableau). \n - Les options
.mutableContainerset.fragmentsAllowedpermettent de contrôler la flexibilité de l'analyse. \n
Approche moderne : le protocole Codable
\n\nDepuis Swift 4, Apple a introduit le protocole Codable (qui combine Encodable et Decodable). C'est une véritable "magie" — il suffit de déclarer une structure, et Swift sait automatiquement comment analyser et sérialiser les données. Réécrivons l'exemple précédent en utilisant Codable.
1. Déclaration du modèle de données
\n\nstruct User: Codable {\n let name: String\n let age: Int\n let email: String\n let isActive: Bool\n let hobbies: [String]\n}\n\nRemarque : les noms des champs dans la structure doivent correspondre aux clés JSON (la casse est importante). Si les clés diffèrent (par exemple, snake_case), utilisez CodingKeys.