Arbeiten mit JSON in Swift: Parsing und Serialisierung für Anfänger
\n\nJSON (JavaScript Object Notation) ist das beliebteste Datenaustauschformat in modernen mobilen und Webanwendungen. Wenn Sie für iOS oder macOS mit Swift entwickeln, ist die Fähigkeit, JSON zu parsen und zu serialisieren, eine unverzichtbare Fähigkeit. In diesem Artikel werden wir alle grundlegenden Methoden der Arbeit mit JSON behandeln: vom klassischen JSONSerialization bis zum modernen Protokoll Codable. Das Material richtet sich an Anfänger, die bereits mit den Grundlagen von Swift vertraut sind.
Was ist JSON und warum wird es in Swift benötigt?
\n\nJSON ist ein textbasiertes Format, das auf der JavaScript-Syntax basiert. Es besteht aus Schlüssel-Wert-Paaren, verschachtelten Objekten und Arrays. In der iOS-Entwicklung wird JSON verwendet für:
\n\n- \n
- Abrufen von Daten von REST-API-Servern \n
- Speichern von Konfigurationen und App-Einstellungen \n
- Datenaustausch zwischen App-Modulen \n
- Arbeit mit Datenbanken (z. B. Firebase oder CoreData + JSON) \n
In Swift gibt es zwei Hauptansätze für die Arbeit mit JSON: die ältere Methode über JSONSerialization (aus Foundation) und die moderne Methode mit den Protokollen Codable, Encodable und Decodable. Wir beginnen mit dem einfacheren JSONSerialization, um die Mechanik zu verstehen, und gehen dann zu dem leistungsstarken Codable über.
JSON-Parsing mit JSONSerialization (Foundation)
\n\nJSONSerialization ist eine in Foundation integrierte Klasse, die JSON-Daten in Swift-Objekte (Wörterbücher und Arrays) umwandelt. Diese Methode existiert seit den ersten Versionen von Swift und wird immer noch in Legacy-Projekten verwendet. Lassen Sie uns ein Beispiel durchgehen.
Angenommen, wir haben einen JSON-String mit Benutzerinformationen:
\n\nlet jsonString = """\n{\n "name": "Ivan",\n "age": 30,\n "email": "ivan@example.com",\n "isActive": true,\n "hobbies": ["lesen", "programmieren", "sport"]\n}\n"""\n\nUm dieses JSON zu parsen, konvertieren wir zuerst den String in Data und verwenden dann JSONSerialization:
import Foundation\n\nif let jsonData = jsonString.data(using: .utf8) {\n do {\n if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {\n print("Name: \\(dictionary["name"] ?? "Keine Daten")")\n print("Alter: \\(dictionary["age"] ?? "Keine Daten")")\n if let hobbies = dictionary["hobbies"] as? [String] {\n print("Hobbys: \\(hobbies.joined(separator: ", "))")\n }\n }\n } catch {\n print("JSON-Parsing-Fehler: \\(error.localizedDescription)")\n }\n}\n\nWichtige Punkte:
\n- \n
- Verwenden Sie immer
try-catch— das Parsen kann einen Fehler auslösen. \n - Das Ergebnis kommt als
Any, daher muss es in einen bestimmten Typ umgewandelt werden ([String: Any]für ein Objekt,[Any]für ein Array). \n - Die Optionen
.mutableContainersund.fragmentsAllowedermöglichen die Steuerung der Parsing-Flexibilität. \n
Moderner Ansatz: Das Codable-Protokoll
\n\nAb Swift 4 hat Apple das Protokoll Codable (eine Kombination aus Encodable und Decodable) eingeführt. Das ist echter "Zauber" — man deklariert einfach eine Struktur, und Swift weiß selbst, wie man Daten parst und serialisiert. Lassen Sie uns das vorherige Beispiel mit Codable umschreiben.
1. Deklaration des Datenmodells
\n\nstruct User: Codable {\n let name: String\n let age: Int\n let email: String\n let isActive: Bool\n let hobbies: [String]\n}\n\nBeachten Sie: Die Feldnamen in der Struktur müssen mit den JSON-Schlüsseln übereinstimmen (Groß-/Kleinschreibung ist wichtig). Wenn die Schlüssel abweichen (z. B. snake_case), verwenden Sie CodingKeys.