JSON-Verarbeitung in Swift: Codable, JSONSerialization und praktische Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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

Empfehlungen