Swift 4: JSON mit JSONDecoder parsen

Bisher habe ich eigentlich immer SwiftyJSON verwendet, wenn ich kompliziertes JSON-Dateien verarbeiten wollte. Mit Swift 4 haben die Entwickler bei Apple jedoch eine deutliche Verbesserung der „Hausmittel“ gebracht. Ganz so simpel wie SwiftyJSON ist es aus meiner Sicht nicht, aber jede Abhängigkeit, die man weglassen kann, ist ein Vorteil.

Für dieses Beispiel nehmen wir uns also eine einfache API vor. In diesem Fall die Wetter API von Yahoo und wir hätten gerne die Temperatur für Otzberg. Die API Abfrage geht recht einfach und liegt hinter diesem Link.

Was dabei rauskommt ist eine recht einfache Antwort, die dennoch einige Hierarchien tief liegt. Die Tiefe hat auch ihren Sinn, meine Abfrage hat ganz viel „weggeworfen“, was sonst ausgegeben hätte werden können.

Wie kommt man also an die Temperatur? Der von mir gewählte Weg – sicher nicht der Beste – sieht vor, dass ich mir mehrere Codable Structs anlegte und zwar für jede Hierarchie eine:

Im struct für Query habe ich mir auch die Daten für Count & Co rausgezogen, auch wenn ich die eigentlich nicht verwenden will. Aber vollständig ist halt vollständig ;)  Der Zugriff auf die Temperatur ist dann eigentlich gar nicht mehr kompliziert und mir gefällt die Tatsache, dass ich die Struktur meiner JSON Antwort oben so deutlich klar gemacht habe.

Ist das jetzt ne Menge Quelltext für einen einzigen Wert? Keine Frage. In PHP würde man das JSON Object mit json_decode() parsen und dann einfach den Wert auslesen, so nach dieser Art:

Swift ist jedoch eine „strongly typed“ Programmiersprache, d.h. dass eine Variable entweder ein String oder ein Int ist, aber eben nicht einfach wechselt, wie das in PHP, JavaScript & Co möglich ist. Das macht die Arbeit mit Swift ein wenig „nervig“, aber auch sehr zuverlässig. Deine Variable ist immer genau das, was Du vorgegeben hast. Es gibt andere, die das Argument besser machen, als ich das je können werde.

Der Artikel ist eher für meine Erinnerung, als alles andere. Wenn er Dir trotzdem geholfen hat, lass es mich ruhig wissen.

Claus Wolf

Seit 1994 im Netz unterwegs und seit 2004 eingefleischter Mac-Nutzer. 21.5" iMac - 2.9GHz Intel Core i5, 16GB RAM, 1TB Fusion Drive HDD / 128GB iPhone 7 / 128GB iPad 9,7" (2017) / 15" MacBook Pro (Mitte 2014) in der Firma...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.