0Pricing
Swift Academy · Leçon

Codable : encoder et décoder du JSON

Se conformer à Codable, personnaliser CodingKeys et décoder des conteneurs imbriqués.

Codable : encoder et décoder du JSON est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Protocole Codable

Codable est un alias de type pour Encodable & Decodable. Les types conformes peuvent être encodés en JSON et décodés automatiquement depuis le JSON.

struct User: Codable {
  var name: String
  var age: Int
}

Génération automatique

Swift synthétise les implémentations de Codable lorsque toutes les propriétés stockées sont elles-mêmes conformes à Codable.

struct Product: Codable {
  var id: Int
  var title: String
  var price: Double
  // init(from:) and encode(to:) are auto-generated
}

Décodage du JSON

Utilisez JSONDecoder pour décoder des Data vers votre type Decodable.

let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // Alice

Encodage en JSON

Utilisez JSONEncoder pour encoder une valeur Codable en Data.

let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)

CodingKeys personnalisés

Utilisez une énumération CodingKeys pour établir la correspondance entre les noms des propriétés Swift et les clés JSON.

struct Article: Codable {
  var createdAt: Date
  enum CodingKeys: String, CodingKey {
    case createdAt = "created_at"
  }
}

Stratégies de décodage des dates

Configurez JSONDecoder.dateDecodingStrategy pour analyser les dates dans différents formats.

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)

Conteneurs imbriqués

Décodez les objets JSON imbriqués en définissant des structures Codable imbriquées ou en utilisant manuellement des conteneurs indexés.

struct Response: Codable {
  struct Data: Codable {
    var users: [User]
  }
  var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)

Logique de décodage personnalisée

Redéfinissez init(from:) pour gérer les structures JSON non standard ou appliquer des transformations pendant le décodage.

struct Rating: Codable {
  var stars: Int
  init(from decoder: Decoder) throws {
    let container = try decoder.singleValueContainer()
    let raw = try container.decode(Double.self)
    stars = Int(raw.rounded())
  }
  func encode(to encoder: Encoder) throws {
    var container = encoder.singleValueContainer()
    try container.encode(Double(stars))
  }
}

keyDecodingStrategy

Utilisez .convertFromSnakeCase pour convertir automatiquement les clés JSON en snake_case en propriétés Swift en camelCase.

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstName

Options d'encodage

Configurez JSONEncoder.outputFormatting pour obtenir une sortie mise en forme ou triée.

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)

Gestion des champs facultatifs

Déclarez les propriétés comme facultatives afin de gérer proprement les clés JSON manquantes sans lever d'erreur.

struct User: Codable {
  var name: String
  var bio: String?  // nil if "bio" key is absent from JSON
}

Vérification rapide

Quelle stratégie de JSONDecoder convertit automatiquement les clés JSON en snake_case en noms de propriétés Swift en camelCase ?

Récapitulatif de la leçon

Adoptez Codable pour encoder et décoder automatiquement le JSON. Utilisez CodingKeys pour remapper les noms de propriétés, keyDecodingStrategy = .convertFromSnakeCase avec les API qui utilisent le snake_case, init(from:) pour le JSON non standard et dateDecodingStrategy pour analyser les dates.

Questions Fréquemment Posées

La leçon « Codable : encoder et décoder du JSON » est-elle gratuite ?

Oui — le texte complet de « Codable : encoder et décoder du JSON » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Codable : encoder et décoder du JSON » ?

Se conformer à Codable, personnaliser CodingKeys et décoder des conteneurs imbriqués. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Codable : encoder et décoder du JSON » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. URLSession data(from:) avec async/await
  2. Codable : encoder et décoder du JSON
  3. Gestion des erreurs et codes d’état HTTP
  4. Logique de nouvelle tentative et URLSession en arrière-plan
← Retour à Swift Academy