Traitement JSON en Swift : Codable, JSONSerialization, SwiftJSON

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 le format d'échange de données principal dans les applications iOS/macOS modernes. Swift fournit un ensemble puissant d'outils pour travailler avec JSON, allant des protocoles intégrés Codable aux bibliothèques tierces simplifiant l'analyse et la sérialisation. Dans cet article, nous allons détailler toutes les principales méthodes de traitement JSON en Swift pour les plateformes Apple.



Prise en charge intégrée de JSON : Codable (Swift 4+)

Depuis Swift 4, Apple a introduit les protocoles Codable (combinant Encodable et Decodable), qui permettent de convertir automatiquement des types de données personnalisés en JSON et vice versa sans écrire de code passe-partout.



Exemple de base de décodage JSON

import Foundation

// 1. Définir le modèle de donnéesstruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

// 2. Chaîne JSONlet jsonString = """{ "id": 1, "name": "Ivan Petrov", "email": "ivan@example.com", "isActive": true}"""

// 3. Décoderif 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)") }}


Encodage d'un objet en JSON

let newUser = User(id: 2, name: "Maria Sidorova", email: "maria@example.com", isActive: false)

let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // pour une sortie lisible

do { let jsonData = try encoder.encode(newUser) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }} catch { print("Erreur d'encodage : \\(error)")}


Travail avec les clés en snake_case et stratégies personnalisées

Souvent, le JSON arrive avec des clés en style snake_case (par exemple, first_name), tandis que les propriétés Swift sont écrites en camelCase (firstName). Cela se résout en une seule ligne :

decoder.keyDecodingStrategy = .convertFromSnakeCaseencoder.keyEncodingStrategy = .convertToSnakeCase


JSONSerialization — travail de bas niveau

Pour les cas où la structure JSON est inconnue à l'avance ou nécessite de la flexibilité, on utilise JSONSerialization de Foundation :

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

Cette méthode retourne Any, donc un transtypage est nécessaire. Elle convient pour les données dynamiques, mais est moins sûre au niveau des types.



Bibliothèques tierces

Malgré la puissance des outils intégrés, il existe des bibliothèques populaires qui simplifient le travail avec JSON en Swift :



1. SwiftyJSON

L'une des bibliothèques les plus populaires. Elle permet d'accéder aux éléments JSON via des indices (subscripts) et gère automatiquement les valeurs optionnelles.

// Installation via Swift Package Manager : https://github.com/SwiftyJSON/SwiftyJSONimport SwiftyJSON

let json = JSON(parseJSON: jsonString)let userName = json["name"].stringValuelet userEmail = json["email"].string ?? "non spécifié"print("Nom : \\(userName), Email : \\(userEmail)")

// Travail avec des objets imbriquéslet address = json["address"]["city"].stringValue


2. ObjectMapper

Bibliothèque pour le mapping JSON vers les objets et vice versa. Nécessite d

Recommendations