JSON-Verarbeitung in Swift (iOS/macOS): vollständiger Leitfaden
JSON (JavaScript Object Notation) ist eines der beliebtesten Formate für den Datenaustausch in modernen Anwendungen. Im Apple-Ökosystem (iOS, macOS, watchOS, tvOS) bietet Swift mehrere leistungsstarke Möglichkeiten zur Arbeit mit JSON. In diesem Artikel werden wir drei Hauptansätze behandeln: das native Codable, das low-level JSONSerialization und die beliebte Drittanbieter-Bibliothek SwiftyJSON. Sie erfahren, wie Sie JSON in Swift mit Codebeispielen parsen, erstellen und verarbeiten.
1. Codable – der moderne Swift-Standard
Seit Swift 4 hat Apple die Protokolle Codable (die Encodable und Decodable vereinen) eingeführt. Dies ist die bequemste und typsicherste Methode zur Arbeit mit JSON. Sie müssen lediglich eine Struktur oder Klasse deklarieren, die Codable entspricht, und JSONEncoder/JSONDecoder verwenden.
Beispiel: JSON-Parsing aus einer API-Antwort
import Foundation
// Definiere ein Modell, das automatisch Codable entsprichtstruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}
// Beispiel-JSON-Stringlet jsonString = """{ "id": 42, "name": "Ivan Petrov", "email": "ivan@example.com", "isActive": true}"""
// Parsingif let jsonData = jsonString.data(using: .utf8) { let decoder = JSONDecoder() do { let user = try decoder.decode(User.self, from: jsonData) print("Benutzer: \\(user.name), E-Mail: \\(user.email)") } catch { print("Dekodierungsfehler: \\(error.localizedDescription)") }}Beispiel: JSON aus einem Objekt erstellen
let user = User(id: 1, name: "Anna Smirnova", email: "anna@test.com", isActive: false)let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // für schöne Formatierung
if let jsonData = try? encoder.encode(user), let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString)}Arbeiten mit verschachtelten Strukturen und Arrays
struct Company: Codable { let name: String let employees: [User]}
let companyJson = """{ "name": "TechCorp", "employees": [ {"id": 1, "name": "Oleg", "email": "oleg@tc.com", "isActive": true}, {"id": 2, "name": "Maria", "email": "maria@tc.com", "isActive": false} ]}"""
if let data = companyJson.data(using: .utf8), let company = try? JSONDecoder().decode(Company.self, from: data) { print("Unternehmen: \\(company.name), Mitarbeiter: \\(company.employees.count)")}2. JSONSerialization – der klassische Ansatz (Foundation)
Vor der Einführung von Codable war JSONSerialization aus Foundation das wichtigste Werkzeug. Es arbeitet mit Foundation-Wörterbüchern und -Arrays ([String: Any] und [Any]). Diese Methode ist nützlich, wenn die JSON-Struktur im Voraus unbekannt oder stark dynamisch ist.
Beispiel: Parsing mit JSONSerialization
if let data = jsonString.data(using: .utf8) { do { if let dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { let id = dict["id"] as? Int ?? 0 let name = dict["name"] as? String ?? "Unbekannt" print("ID: \\(id), Name: \\(name)") } } catch { print("Fehler: \\(error)") }}Nachteil: Fehlende Typsicherheit – Typen müssen manuell gecastet werden, was zu Laufzeitfehlern führen kann. Es wird empfohlen, wo immer möglich Codable zu verwenden.
3. SwiftyJSON – praktische Drittanbieter-Bibliothek
SwiftyJSON ist eine beliebte Open-Source-Bibliothek, die die Arbeit mit JSON in Swift vereinfacht. Sie bietet eine saubere und lesbare Syntax, um auf JSON-Werte zuzugreifen, ohne dass manuelle Typumwandlungen erforderlich sind.
Auch in der Bibliothek
Generierung von PDF-Berichten in TypeScript: Bibliotheken und Werkzeuge
GraphQL in C++: Die Bibliothek cppgraphqlgen für moderne APIs
Inversify TypeScript: Vollständige Anleitung mit Beispielen
Caching in TypeScript: Die Bibliothek node-cache