0Pricing
Swift Academy · Lektion

Strategien für Schlüssel- und Datumsdecodierung

Verwenden Sie snake_case- und Datumsstrategien.

Strategien für Schlüssel- und Datumsdecodierung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Überblick über Dekodierungsstrategien

Statt für jeden Typ ein CodingKeys-Enum zu schreiben, können Sie eine globale Strategie für den Decoder festlegen. Strategien wandeln Schlüssel um und verarbeiten Datumsangaben in allen dekodierten Typen einheitlich.

import Foundation

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
print("Strategy configured")

convertFromSnakeCase

Wenn Sie keyDecodingStrategy = .convertFromSnakeCase festlegen, werden Schlüssel wie first_name automatisch der camelCase-Eigenschaft firstName zugeordnet – ein CodingKeys-Enum ist nicht erforderlich.

import Foundation

struct User: Codable {
    var firstName: String
    var lastName: String
}

let json = "{\"first_name\":\"Ada\",\"last_name\":\"Lovelace\"}"
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let u = try decoder.decode(User.self, from: json.data(using: .utf8)!)
print(u.firstName, u.lastName)

In Snake Case encodieren

Der Encoder bietet die entsprechende Gegenoption: keyEncodingStrategy = .convertToSnakeCase schreibt camelCase-Eigenschaften als JSON-Schlüssel im snake_case-Format.

import Foundation

struct User: Codable {
    var firstName: String
}

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let data = try encoder.encode(User(firstName: "Ada"))
print(String(data: data, encoding: .utf8)!)

Die Strategie gilt für alle Schlüssel

Eine Schlüsselstrategie wird einheitlich auf jede Eigenschaft jedes verschachtelten Typs angewendet. Das ist ideal, wenn eine gesamte API durchgängig snake_case verwendet.

import Foundation

struct Meta: Codable { var createdAt: String }
struct Doc: Codable { var docTitle: String; var docMeta: Meta }

let json = "{\"doc_title\":\"A\",\"doc_meta\":{\"created_at\":\"now\"}}"
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let d = try decoder.decode(Doc.self, from: json.data(using: .utf8)!)
print(d.docTitle, d.docMeta.createdAt)

Das Problem mit Datumsangaben

JSON kennt keinen Datentyp für Datumsangaben. Date-Werte werden als Zahlen oder Zeichenfolgen encodiert, und der Decoder muss das Format kennen. Eine dateDecodingStrategy legt fest, wie die Werte interpretiert werden.

import Foundation

struct Event: Codable {
    var name: String
    var date: Date
}

print("Date needs a strategy to parse")

Datumsdekodierung mit iso8601

dateDecodingStrategy = .iso8601 verarbeitet standardisierte ISO-8601-Zeitstempel wie 2020-01-01T00:00:00Z zu Date-Werten.

import Foundation

struct Event: Codable {
    var name: String
    var date: Date
}

let json = "{\"name\":\"Launch\",\"date\":\"2020-01-01T00:00:00Z\"}"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let e = try decoder.decode(Event.self, from: json.data(using: .utf8)!)
print(e.date.timeIntervalSince1970)

Datumsencodierung mit iso8601

Das Gegenstück für den Encoder ist dateEncodingStrategy = .iso8601. Damit werden Date-Werte als ISO-8601-Zeichenfolgen geschrieben.

import Foundation

struct Event: Codable {
    var name: String
    var date: Date
}

let e = Event(name: "Launch", date: Date(timeIntervalSince1970: 1577836800))
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
let data = try encoder.encode(e)
print(String(data: data, encoding: .utf8)!)

Strategie secondsSince1970

Wenn eine API Unix-Zeitstempel als Zahlen sendet, verwenden Sie .secondsSince1970, um sie als Sekunden seit dem Beginn der Unix-Epoche zu interpretieren.

import Foundation

struct Event: Codable {
    var date: Date
}

let json = "{\"date\":1577836800}"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .secondsSince1970
let e = try decoder.decode(Event.self, from: json.data(using: .utf8)!)
print(e.date.timeIntervalSince1970)

Benutzerdefinierte Datumsformate

Für nicht standardisierte Formate übergeben Sie einen DateFormatter über .formatted(_:). Damit können Sie beispielsweise Datumsangaben wie 2020-01-01 ohne Zeitanteil verarbeiten.

import Foundation

struct Event: Codable { var date: Date }

let fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd"
fmt.timeZone = TimeZone(identifier: "UTC")
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(fmt)
let e = try decoder.decode(Event.self, from: "{\"date\":\"2020-01-01\"}".data(using: .utf8)!)
print(e.date.timeIntervalSince1970)

Strategien kombinieren

Sie können Schlüssel- und Datumsstrategien gemeinsam für denselben Decoder festlegen. So verarbeiten Sie eine snake_case-API mit ISO-8601-Datumsangaben ganz ohne wiederholten Code pro Typ.

import Foundation

struct LogEntry: Codable {
    var eventName: String
    var occurredAt: Date
}

let json = "{\"event_name\":\"login\",\"occurred_at\":\"2020-01-01T00:00:00Z\"}"
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
decoder.dateDecodingStrategy = .iso8601
let entry = try decoder.decode(LogEntry.self, from: json.data(using: .utf8)!)
print(entry.eventName, entry.occurredAt.timeIntervalSince1970)

Strategie oder CodingKeys

Eine globale Strategie ist für einheitliche APIs prägnant. Wenn sich nur wenige Schlüssel unterscheiden oder die Namen unregelmäßig sind, bietet ein explizites CodingKeys-Enum eine präzise Kontrolle über jeden einzelnen Schlüssel. Beide Ansätze lassen sich sogar kombinieren.

import Foundation

struct Item: Codable {
    var itemName: String
}

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let i = try decoder.decode(Item.self, from: "{\"item_name\":\"Pen\"}".data(using: .utf8)!)
print(i.itemName)

Kurzer Check: Strategien

Testen Sie Ihr Verständnis von Dekodierungsstrategien.

Zusammenfassung: Schlüssel- und Datumsstrategien

Sie haben gelernt, wie Sie Coder global konfigurieren:

  • keyDecodingStrategy = .convertFromSnakeCase ordnet snake_case camelCase zu; .convertToSnakeCase encodiert in die umgekehrte Richtung.
  • dateDecodingStrategy = .iso8601 verarbeitet ISO-Zeitstempel; .secondsSince1970 und .formatted(_:) decken andere Formate ab.
  • Strategien werden einheitlich auf jeden verschachtelten Typ angewendet.
  • Verwenden Sie Strategien für einheitliche APIs und CodingKeys für unregelmäßige APIs.

Häufig gestellte Fragen

Ist die Lektion „Strategien für Schlüssel- und Datumsdecodierung“ kostenlos?

Ja — der vollständige Text von „Strategien für Schlüssel- und Datumsdecodierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Strategien für Schlüssel- und Datumsdecodierung“?

Verwenden Sie snake_case- und Datumsstrategien. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Strategien für Schlüssel- und Datumsdecodierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. CodingKeys zum Umbenennen
  2. Strategien für Schlüssel- und Datumsdecodierung
  3. Manuelles encode(to:) und init(from:)
  4. Heterogenes JSON decodieren
← Zurück zu Swift Academy