Lucrul cu JSON în Swift

Formatul de date JSON este utilizat pe scară largă pe webul modern și este una dintre cele mai comune metode de transfer de date. Multe dintre API-urile moderne, în special serviciile de web REST, suportă formatul de date JSON.

În acest tutorial, vă vom arăta cum să lucrați cu formatul de date JSON în limbajul de programare Swift pe iOS, tvOS, watchOS și OS X.

Cerințe preliminare

Acest tutorial necesită să executați cel puțin Xcode 7, care include versiunea 2 a limbajului de programare Swift. Swift 2 a introdus o serie de adăugări importante pe care le vom folosi în acest tutorial, cum ar fi manipularea erorilor și pază afirmație.

1. Ce este JSON?

După cum am menționat, JSON este un format de date utilizat în mod obișnuit, care este utilizat pentru comunicarea dintre clienți și servere, de exemplu. Este popular datorită utilizării sale pe aproape orice platformă mobilă, cum ar fi iOS, Android, Windows Phone și browserele web.

Fragmentul următor este un exemplu de format de date JSON. Acesta este fragmentul pe care îl vom folosi în acest tutorial.

"dateTitle": "JSON Tutorial!", "swiftVersion": 2.1 "utilizatori": "nume": "John", "vârstă": 25; 29, "nume": "Sarah", "vârstă": 22],

După cum puteți vedea, formatul de date JSON este ușor de înțeles. JSON este structurată folosind două tipuri de colecții, dicționare și tablouri. Dicționarele conțin una sau mai multe perechi cheie-valoare și sunt închise de acolade, . Arramentele conțin o listă de elemente ordonate și sunt însoțite de paranteze pătrate, []. Aproape fiecare limbaj de programare definește aceste tipuri de colecții, motiv pentru care JSON este susținut de aproape fiecare limbă din jur.

Următoarea este o listă cu tipurile de date acceptate dintr-un obiect JSON:

  • Şir
  • Număr (întreg, float, dublu, etc.)
  • boolean
  • mulțime
  • Dicţionar

O parte din motivul pentru care JSON este atât de popular este că este ușor de citit de către oameni și poate fi, de asemenea, ușor de analizat și serializat de mașini. Parsarea și serializarea este atunci când aparatul dă date brute și transformă acest lucru într-un obiect utilizabil de către aplicație.

2. Citirea datelor JSON

Pasul 1: Creați loc de joacă

Activați Xcode și creați un nou loc de joacă. Dați locului de joacă un nume și un set Platformă la iOS.

Pasul 2: Adăugați date JSON

Deschide Navigator din stânga și extindeți JSON loc de joaca. Faceți clic dreapta pe Resurse și selectați Fișier nou din meniu.

Denumiți fișierul data.json și să populați fișierul cu următorul JSON.

"utilizatori": "nume": "John", "vârstă": 25, "nume": " : 22], "dataTitle": "Tutorial JSON!", "SwiftVersion": 2.1

Pasul 3: Obținerea datelor

Acum că aveți o înțelegere de bază a tipului de date JSON, este timpul să începeți să lucrați cu el în Swift. Scoateți conținutul locului de joacă și adăugați următoarele trei linii de cod la acesta.

import UIKit let url = NSBundle.mainBundle () URLForResource ("Date", cu Extensie: "json") da date = NSData (contentsOfURL: url!)

Cu acest cod, vom primi o referință la fișierul JSON pe care l-am adăugat la loc de joacă cu câteva momente în urmă și vom obține conținutul său ca date brute. Rețineți că adresa URL pe care o creăm aici este una locală a fișierului de pe computer. Aceasta ar putea fi adresa URL a unui serviciu web sau a oricărei alte adrese URL de care aveți nevoie.

De asemenea, este important să înțelegeți că datele brute ale unui obiect JSON nu trebuie să fie colectate în acest fel. Singura parte esențială este cea brută NSData obiect, care ar putea proveni dintr-o adresă URL așa cum se arată în exemplu, un răspuns API sau dintr-o serie de alte surse.

Pasul 4: Parsarea datelor

Următorul pas este de a analiza și serializa aceste date într-un obiect pe care îl putem folosi. Din fericire, pe iOS și OS X, Fundația NSJSONSerialization clasa se ocupă de toată munca grea de parsare și serializare pentru tine. Adăugați următorul fragment de cod în locația dvs. de joacă.

let object = try NSJSONSerialization.JSONObjectWithData (date !, opțiuni: .AllowFragments) dacă dorești dicționarul = obiect ca? [String: AnyObject] readJSONObject (dicționar) captură // Eroare de manevră

Mai întâi închidem toată logica noastră într-un do-catch , deoarece serializarea din datele JSON are potențialul de a arunca o eroare. Apoi, numim JSONObjectWithData (_: opțiuni :) metodă a NSJSONSerialization clasa, trecerea în NSData obiect și unele opțiuni. Opțiunile care pot fi transmise sunt definite de către NSJSONReadingOptions structura:

  • AllowFragments Acest lucru permite ca obiectele din primul sau ultimul nivel al datelor JSON care nu sunt citite din matrice sau din dicționare. În datele JSON utilizate în acest tutorial, aceasta include atât dataTitle și swiftVersion valorile.
  • MutableLeaves Această opțiune permite citirea șirurilor de date JSON pentru a fi create automat ca instanțe de NSMutableString. Această opțiune este mai relevantă pentru dezvoltarea obiectivului C. În Swift, puteți ignora această opțiune deoarece șirurile de caractere sunt un tip de date de bază încorporat și sunt mutabile automat când este definită cu var cuvinte cheie.
  • MutableContainers Acest lucru permite ca matricile și dicționarele să fie citite din datele JSON pentru a fi, de asemenea, mutable. Ca și în cazul MutableLeaves opțiune, în Swift, folosind var cuvântul cheie atunci când atribuie matricea / dicționarul unei variabile face ca acesta să fie mutabil.

În cele din urmă, verificăm dacă obiectul serializat este cel așteptat [String: AnyObject] tip și, dacă da, apelați readJSONObject (_ :) funcţie. Să aruncăm o privire la readJSONObject (_ :) metodă.

Pasul 5: Lucrul cu datele

Odată ce datele JSON pe care le-ați colectat au fost analizate și serializate, puteți interacționa cu acestea la fel cum ați face cu orice alt dicționar. Adăugați următoarea funcție la locul de joacă de mai sus  do-catch afirmație.

func readJSONObject (obiect: [String: AnyObject]) pază let titlu = obiect ["dataTitle"] ca? String, permiteți versiunea = object ["swiftVersion"] ca? Float, permiteți utilizatorilor = obiect ["utilizatori"] ca? [[String: AnyObject]] altceva return _ = "Swift \ (version)" + titlu pentru utilizator în utilizatori guard let name = user ["name"] as? Șir, permiteți vârstei = utilizator ["vârstă"] ca? Intră altceva break Switch age caz 22: _ = nume + "este \ (vârstă) de ani." cazul 25: _ = nume + "este \ (vârstă) de ani." cazul 29: _ = nume + "este \ (vârstă) de ani." implicit: sparge

După cum puteți vedea, datele JSON serializate pot fi interacționate în același mod ca un dicționar obișnuit sau o matrice. De mai sus readJSONObject (_ :) funcția servește ca exemplu de modul în care puteți extrage informațiile dintr-un obiect serializat JSON. Rețineți că am inclus a intrerupator declarația în funcție pur și simplu pentru a separa șiruri de caractere în loc de joacă de ieșire.

Odată ce spațiul de joacă a terminat să execute codul, ar trebui să vedeți un rezultat în bara laterală similară cu cele de mai jos.

Felicitări. Acum știți cum să preluați datele JSON, să le serializați și să le utilizați ca un dicționar normal în codul dvs. Swift. După cum puteți vedea, procesul este foarte simplu datorită NSJSONSerialization API, care face cea mai mare parte a muncii grele pentru noi.

3. Scrierea datelor JSON

Pe lângă citirea datelor JSON, pe care le primiți dintr-o sursă online sau dintr-un fișier local, este de asemenea important să știți cum să vă creați propriile date JSON. Indiferent dacă aceasta este salvată ca fișier local sau cel mai frecvent pentru a fi trimisă la un serviciu web, procesul este la fel de simplu și simplu ca și citirea datelor JSON. Uitați-vă la următorul exemplu.

permiteți validDictionary = ["numericalValue": 1, "stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5]] if NSJSONSerialization .isValidJSONObject (validDictionary) // Adevărat face let rawData = încerca NSJSONSerialization.dataWithJSONObject (validDictionary, opțiuni: .PrettyPrinted) catch // Eroare de manipulare dacă NSJSONSerialization.isValidJSONObject (invalidDictionary) // False // NSJSONSerialization. dataWithJSONObject (validDictionary, opțiuni: .PrettyPrinted) va produce o eroare dacă este chemată

Când creați propriile date JSON de la un obiect, este mai bine să utilizați mai întâi isValidJSONObject (_ :) pentru a verifica dacă obiectul poate sa fi convertit într-un obiect JSON.

După această verificare inițială, apelați dataWithJSONObject (_ :) metoda, care returnează o NSData dacă reușiți. Deoarece am verificat deja dacă obiectul este valid sau nu, eroarea captură blocul de aici nu este la fel de important ca înainte, dar poate fi numit din cauza unei erori API interne la crearea datelor brute.

 PrettyPrinted opțiunea utilizată în acest exemplu este singura opțiune disponibilă pentru a fi utilizată cu această metodă și, atunci când este utilizată, adaugă pur și simplu spații mai mari la datele JSON pentru a facilita citirea.

// Cu opțiunea PrettyPrinted: "name": "John", "age": 25

A revenit NSData obiect poate fi folosit atunci când vă place. Puteți să o salvați într-un fișier local sau să o trimiteți unui serviciu web la.

Concluzie

Acum ar trebui să fii confortabil să lucrezi cu JSON în Swift. Este clar că jucătorul de stele este NSJSONSerialization clasa, cu puțin ajutor din partea câtorva pază și do-catch declarații. După cum puteți vedea, lucrul cu datele JSON este foarte ușor. Odată ce datele JSON sunt analizate și serializate, puteți interacționa cu ele ca și în cazul altor obiecte obișnuite.

Ca întotdeauna, asigurați-vă că părăsiți comentariile și comentariile dvs. în comentariile de mai jos.

Cod