JSON-Verarbeitung in Swift: Codable, JSONSerialization, SwiftJSON

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): Vollständiger Leitfaden

JSON (JavaScript Object Notation) ist das wichtigste Datenaustauschformat in modernen iOS/macOS-Anwendungen. Swift bietet eine leistungsstarke Reihe von Werkzeugen für die Arbeit mit JSON, angefangen bei den integrierten Protokollen Codable bis hin zu Drittanbieter-Bibliotheken, die das Parsing und die Serialisierung vereinfachen. In diesem Artikel werden wir alle wichtigen Methoden zur JSON-Verarbeitung in Swift für Apple-Plattformen im Detail besprechen.



Integrierte JSON-Unterstützung: Codable (Swift 4+)

Ab Swift 4 hat Apple die Protokolle Codable (die Encodable und Decodable vereinen) eingeführt, die es ermöglichen, benutzerdefinierte Datentypen automatisch in JSON und zurück zu konvertieren, ohne Boilerplate-Code schreiben zu müssen.



Basisbeispiel für JSON-Dekodierung

import Foundation

// 1. Datenmodell definierenstruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

// 2. JSON-Stringlet jsonString = """{ "id": 1, "name": "Ivan Petrov", "email": "ivan@example.com", "isActive": true}"""

// 3. Dekodierenif 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)") }}


Objekt in JSON kodieren

let newUser = User(id: 2, name: "Maria Sidorova", email: "maria@example.com", isActive: false)

let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // für lesbare Ausgabe

do { let jsonData = try encoder.encode(newUser) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }} catch { print("Kodierungsfehler: \\(error)")}


Arbeit mit snake_case-Schlüsseln und benutzerdefinierten Strategien

Oft kommt JSON mit Schlüsseln im snake_case-Stil (z.B. first_name), während Swift-Eigenschaften in camelCase (firstName) geschrieben werden. Dies wird mit einer Zeile gelöst:

decoder.keyDecodingStrategy = .convertFromSnakeCaseencoder.keyEncodingStrategy = .convertToSnakeCase


JSONSerialization — Low-Level-Arbeit

Für Fälle, in denen die JSON-Struktur im Voraus unbekannt ist oder Flexibilität erforderlich ist, wird JSONSerialization aus Foundation verwendet:

if let jsonData = jsonString.data(using: .utf8) {    do {        if let jsonDict = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {            let name = jsonDict["name"] as? String ?? ""            let age = jsonDict["age"] as? Int ?? 0            print("Name: \\(name), Alter: \\(age)")        }    } catch {        print("Fehler: \\(error)")    }}

Diese Methode gibt Any zurück, daher ist eine Typumwandlung erforderlich. Geeignet für dynamische Daten, aber weniger typsicher.



Drittanbieter-Bibliotheken

Trotz der Leistungsfähigkeit der integrierten Werkzeuge gibt es beliebte Bibliotheken, die die Arbeit mit JSON in Swift vereinfachen:



1. SwiftyJSON

Eine der beliebtesten Bibliotheken. Ermöglicht den Zugriff auf JSON-Elemente über Subscripts und verarbeitet optionale Werte automatisch.

// Installation über Swift Package Manager: https://github.com/SwiftyJSON/SwiftyJSONimport SwiftyJSON

let json = JSON(parseJSON: jsonString)let userName = json["name"].stringValuelet userEmail = json["email"].string ?? "nicht angegeben"print("Name: \\(userName), E-Mail: \\(userEmail)")

// Arbeit mit verschachtelten Objektenlet address = json["address"]["city"].stringValue


2. ObjectMapper

Bibliothek zum Mapping von JSON in Objekte und zurück. Erfordert die Definiti

Empfehlungen