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 = .convertFromSnakeCaseordnet snake_case camelCase zu;.convertToSnakeCaseencodiert in die umgekehrte Richtung.dateDecodingStrategy = .iso8601verarbeitet ISO-Zeitstempel;.secondsSince1970und.formatted(_:)decken andere Formate ab.- Strategien werden einheitlich auf jeden verschachtelten Typ angewendet.
- Verwenden Sie Strategien für einheitliche APIs und
CodingKeysfü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
- CodingKeys zum Umbenennen
- Strategien für Schlüssel- und Datumsdecodierung
- Manuelles encode(to:) und init(from:)
- Heterogenes JSON decodieren