Travailler avec JSON en Swift : parsing et sérialisation en pratique

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 en pratique

\n\n

JSON (JavaScript Object Notation) est un format léger d'échange de données qui est devenu le standard de facto pour l'interaction entre le client et le serveur dans le développement mobile et web. Dans l'écosystème Apple (iOS, macOS, watchOS, tvOS), le travail avec JSON s'effectue via de puissants mécanismes intégrés. Dans cet article, nous allons détailler comment parser et sérialiser du JSON en Swift avec des exemples concrets, en utilisant à la fois le protocole moderne Codable et le classique JSONSerialization.

\n\n

Cet article est destiné aux développeurs qui connaissent déjà les bases de Swift et souhaitent travailler en toute confiance avec les requêtes réseau et le stockage local de données au format JSON.

\n\n

1. Bases de JSON et sa place dans les applications Swift

\n\n

JSON est un format textuel basé sur deux structures : les objets (ensembles de paires clé-valeur) et les tableaux (listes ordonnées). En Swift, ces structures correspondent à Dictionary et Array. Les types de données en JSON sont limités : chaînes, nombres, valeurs booléennes, null, objets et tableaux.

\n\n

Un scénario typique d'utilisation de JSON dans une application iOS/macOS se présente comme suit :

\n
    \n
  • Récupération d'une chaîne JSON depuis le serveur (via URLSession).
  • \n
  • Parsing du JSON en modèles Swift (par exemple, structures ou classes).
  • \n
  • Traitement des données et affichage dans l'interface.
  • \n
  • Sérialisation (transformation inverse) des modèles en JSON pour envoi au serveur.
  • \n
\n\n

Apple propose deux approches principales pour travailler avec JSON : JSONSerialization (bas niveau mais flexible) et Codable (haut niveau, type-safe, recommandé depuis Swift 4+).

\n\n

2. Parsing JSON avec Codable (méthode recommandée)

\n\n

Le protocole Codable combine Encodable (pour la sérialisation) et Decodable (pour le parsing). C'est la manière la plus simple et la plus sûre de travailler avec JSON en Swift.

\n\n

Exemple 1 : Parsing d'un objet JSON simple

\n\n

Supposons que le serveur renvoie le JSON suivant :

\n
{\n    "userId": 1,\n    "id": 1,\n    "title": "Exemple de tâche",\n    "completed": false\n}
\n\n

Créons une structure de modèle conforme à Codable :

\n
struct TodoItem: Codable {\n    let userId: Int\n    let id: Int\n    let title: String\n    let completed: Bool\n}
\n\n

Maintenant, effectuons le parsing de la chaîne JSON :

\n
let jsonString = """\n{\n    "userId": 1,\n    "id": 1,\n    "title": "Exemple de tâche",\n    "completed": false\n}\n"""\n\nif let jsonData = jsonString.data(using: .utf8) {\n    let decoder = JSONDecoder()\n    do {\n        let todo = try decoder.decode(TodoItem.self, from: jsonData)\n        print("Tâche : \\(todo.title), terminée : \\(todo.completed)")\n    } catch {\n        print("Erreur de parsing : \\(error.localizedDescription)")\n    }\n}
\n\n

Exemple 2 : Parsing d'un tableau d'objets

\n\n

Si le serveur renvoie un tableau de tâches :

\n
[\n    {"userId": 1, "id": 1, "title": "Tâche 1", "completed": false},\n    {"userId": 1, "id": 2, "title": "Tâche 2", "completed": true}\n]
\n\n

Le parsing se fait tout aussi simplement — il suffit de spécifier le type du tableau :

\n
let todoArray = try decoder.decode([TodoItem].self, from: jsonData)
\n\n

2.1. Clés personnalisées et snake_case

\n\n

Souvent, JSON utilise le format snake_case (par exemple, user_id), tandis qu'en Swift on utilise camelCase (userId). JSONDecoder peut convertir automatiquement les clés :

\n
decoder.keyDecodingStrategy = .convertFromSnakeCase
\n\n

Si vous devez définir une correspondance non standard, utilisez l'énumération CodingKeys :

\n
struct User: Codable {\n    let fullName: String\n    let emailAddress: String\n\n    enum CodingKeys:                

Blogs

Book Recommendations