JSON-Verarbeitung in Swift (iOS/macOS): Von den Grundlagen bis zur fortgeschrittenen Anwendung
JSON (JavaScript Object Notation) ist eines der beliebtesten Datenformate für den Datenaustausch in der mobilen und Desktop-Entwicklung. Im Swift-Ökosystem (iOS/macOS) ist die Arbeit mit JSON nativ und elegant umgesetzt, angefangen beim Codable-Protokoll (Swift 4+) bis hin zur low-level JSONSerialization aus Foundation. In diesem Artikel behandeln wir alle wichtigen Ansätze, zeigen Codebeispiele und geben praktische Empfehlungen für die Bildungswebsite pythonlib.ru.
1. Grundlagen: Das Codable-Protokoll
Das Codable-Protokoll ist eine Kombination aus Encodable und Decodable. Es generiert automatisch Code, um Ihre Strukturen und Klassen in JSON und zurück zu konvertieren. Dies ist der primäre und empfohlene Weg, um in modernem Swift mit JSON zu arbeiten.
1.1. Ein einfaches Datenmodell
import Foundation
struct User: Codable { let id: Int let name: String let email: String let isActive: Bool}
// Beispiel-JSON-Stringlet jsonString = """{ "id": 1, "name": "Ivan Petrov", "email": "ivan@example.com", "isActive": true}"""
// Dekodierungif let jsonData = jsonString.data(using: .utf8) { let decoder = JSONDecoder() if let user = try? decoder.decode(User.self, from: jsonData) { print("Benutzer: \\(user.name), E-Mail: \\(user.email)") }}1.2. Benutzerdefinierte Schlüssel (CodingKeys)
Wenn die Schlüssel im JSON von den Eigenschaften des Modells abweichen (z. B. snake_case im JSON, camelCase in Swift), verwenden Sie die CodingKeys-Enumeration:
struct Product: Codable { let productId: Int let productName: String let price: Double
enum CodingKeys: String, CodingKey { case productId = "product_id" case productName = "product_name" case price }}
let jsonProduct = """{ "product_id": 101, "product_name": "MacBook Pro", "price": 2499.99}"""2. Arbeiten mit Arrays und verschachtelten Objekten
JSON enthält oft Arrays von Objekten oder verschachtelte Strukturen. Codable meistert dies mühelos:
struct Author: Codable { let name: String let books: [Book]}
struct Book: Codable { let title: String let year: Int}
let jsonLibrary = """{ "name": "Joanne K. Rowling", "books": [ {"title": "Harry Potter und der Stein der Weisen", "year": 1997}, {"title": "Harry Potter und die Kammer des Schreckens", "year": 1998} ]}"""
if let data = jsonLibrary.data(using: .utf8) { let author = try? JSONDecoder().decode(Author.self, from: data) print("Autor: \\(author?.name ?? ""), Bücher: \\(author?.books.count ?? 0)")}3. JSONSerialization – Der Low-Level-Ansatz
Obwohl Codable der bevorzugte Weg ist, muss man manchmal mit dynamischen oder unstrukturierten Daten arbeiten. In solchen Fällen verwenden Sie JSONSerialization aus Foundation:
let jsonString = """{ "status": "success", "data": { "temperature": 22.5, "humidity": 65, "city": "Moskau" }}"""
if let data = jsonString.data(using: .utf8) { do { if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { if let status = json["status"] as? String { print("Status: \\(status)") } if let dataDict = json["data"] as? [String: Any], let temp = dataDict["temperature"] as? Double { print("Temperatur: \\(temp)°C") } } } catch { print("JSON-Parsing-Fehler: \\(error.localizedDescription)") }}4. Fehlerbehandlung und optionale Werte
Echte JSON-Daten
Auch in der Bibliothek
Datenbankmigrationen in C++: Überblick über Tools und Bibliotheken
PDF-Generierung in JavaScript (Node.js): Bibliotheken und Werkzeuge
Kotlin Symbol Processing (KSP) für Kotlin: Komplettguide mit Beispielen