JSON-dataformatet er mye brukt på tvers av det moderne webområdet, og det er en av de vanligste måtene å overføre data til. Mange moderne APIer, spesielt RESTful webtjenester, støtter JSON dataformatet.
I denne veiledningen vil jeg vise deg hvordan du arbeider med JSON-datformatet i Swift programmeringsspråket på iOS, tvOS, watchOS og OS X.
Denne opplæringen krever at du kjører minst Xcode 7, som inkluderer versjon 2 av Swift programmeringsspråket. Swift 2 har introdusert en rekke viktige tillegg som vi skal bruke i denne opplæringen, for eksempel feilhåndtering og vakt
uttalelse.
Som jeg nevnte, er JSON et ofte brukt datformat som brukes til kommunikasjon mellom for eksempel klienter og servere. Det er populært på grunn av det er brukervennlighet på nesten hvilken som helst mobil plattform som iOS, Android, Windows Phone og nettlesere.
Følgende utdrag er et eksempel på JSON-dataformatet. Dette er koden som vi skal bruke i denne opplæringen.
"dataTitle": "JSON Tutorial!", "swiftVersion": 2.1 "brukere": ["navn": "John", "alder": 25, "navn": "Mark", "alder" 29, "navn": "Sarah", "alder": 22],
Som du kan se, er JSON-dataformatet lett å forstå. JSON er strukturert ved hjelp av to samlingstyper, ordbøker og arrays. Ordbøker inneholder ett eller flere av nøkkelverdier og er omgitt av krøllete bånd, . Arrays inneholder en liste over bestilte varer og er vedlagt ved firkantede parenteser,
[]
. Nesten alle programmeringsspråk definerer disse samlingstypene, og derfor støttes JSON av nesten alle språk rundt.
Følgende er en liste over de støttede datatyper i et JSON-objekt:
En del av grunnen til at JSON er så populær, er fordi det er lett å lese av mennesker, og det kan også enkelt analyseres og serialiseres av maskiner. Parsing og serialisering er når maskinen tar inn rå data og gjør det til et objekt som kan brukes av programmet.
Brann opp Xcode og opprett en ny lekeplass. Gi lekeplassen et navn og sett Plattform til iOS.
Åpne Navigator til venstre og utvide JSON lekeplass. Høyreklikk på ressurser mappe og velg Ny fil fra menyen.
Gi filen navnet data.json og fyll filen med følgende JSON.
"navn": "mark", "alder": 29, "navn": "Sarah", "alder" : 22], "dataTitle": "JSON Tutorial!", "SwiftVersion": 2.1
Nå som du har en grunnleggende forståelse av hva JSON dataformatet er, er det på tide å begynne å jobbe med det i Swift. Fjern innholdet på lekeplassen og legg til de følgende tre kodelinjene.
Import UIKit la url = NSBundle.mainBundle (). URLForResource ("Data", medExtension: "json") la data = NSData (contentOfURL: url!)
Med denne koden får vi en referanse til JSON-filen vi lagt til på lekeplassen for noen få minutter siden, og får innholdet som rådata. Vær oppmerksom på at nettadressen vi lager her er en lokal til filen på datamaskinen din. Dette kan være nettadressen til en webtjeneste eller en annen nettadresse du måtte trenge.
Det er også viktig å forstå at rådataene til et JSON-objekt ikke må samles på denne måten. Den eneste viktige delen er rå NSData
objekt, som kan komme fra en nettadresse som vist i eksempelet, et API-svar eller fra en rekke andre kilder.
Det neste trinnet er å analysere og serialisere disse dataene i en gjenstand vi kan bruke. Heldigvis, på IOS og OS X, stiftelsen NSJSONSerialization
klassen håndterer alt det harde arbeidet med å parsing og serialisering for deg. Legg til følgende kodestykke til lekeplassen din.
gjør let object = prøv NSJSONSerialization.JSONObjectWithData (data !, alternativer: .AllowFragments) hvis la ordbok = objekt som? [String: AnyObject] readJSONObject (ordbok) fangst // Håndteringsfeil
Vi vedlegger først all vår logikk i en gjør-fangst
setning, fordi serialisering fra JSON-data har potensial til å kaste en feil. Deretter kaller vi JSONObjectWithData (_: alternativer :)
metode av NSJSONSerialization
klasse, passerer i NSData
objekt og noen alternativer. Alternativene som kan sendes inn, er definert av NSJSONReadingOptions
struktur:
AllowFragments
Dette tillater gjenstander innenfor det første eller øverste nivået av JSON-dataene som ikke er arrays eller ordbøker som skal leses. I JSON-dataene som brukes i denne opplæringen, inkluderer dette både dataTitle
og swiftVersion
verdier.MutableLeaves
Dette alternativet tillater at strenger leses fra JSON-dataene som automatisk skal opprettes som forekomster av NSMutableString
. Dette alternativet er mer relevant for mål-C-utvikling. I Swift kan du ignorere dette alternativet fordi strenger er en innebygd grunnleggende datatype og automatisk omdannes når den er definert med Var
søkeord.MutableContainers
Dette gjør det mulig for arrays og ordbøker å bli lest fra JSON-dataene for å også være mutable. Som med MutableLeaves
alternativ, i Swift, ved hjelp av Var
søkeord når tilordnet array / ordbok til en variabel gjør det automatisk mutable.Til slutt ser vi om det serielle objektet er av den forventede [String: AnyObject]
skriv inn og, hvis så, ring på readJSONObject (_ :)
funksjon. La oss ta en titt på readJSONObject (_ :)
metode.
Når JSON-dataene du har samlet, har blitt analysert og serialisert, kan du samhandle med det akkurat som du ville med noen annen ordliste. Legg til følgende funksjon på lekeplassen din ovenfor de gjør-fangst
uttalelse.
func readJSONObject (objekt: [String: AnyObject]) guard la title = objekt ["dataTitle"] som? String, la versjon = objekt ["swiftVersion"] som? Float, la brukere = objekt [[brukere]] som? [[String: AnyObject]] else return _ = "Swift \ (versjon)" + tittel for bruker i brukere guard let navn = bruker ["navn"] som? String, la alder = bruker ["alder"] som? Int else break switch alder case 22: _ = name + "er \ (alder) år gammel." tilfelle 25: _ = navn + "er \ (alder) år gammel." sak 29: _ = navn + "er \ (alder) år gammel." standard: pause
Som du kan se, kan de serialiserte JSON-dataene samhandles med på samme måte som en vanlig ordbok eller array. Ovennevnte readJSONObject (_ :)
funksjonen fungerer som et eksempel på hvordan du kan trekke ut informasjonen fra et serialisert JSON objekt. Legg merke til at jeg inkluderte en bytte om
setning i funksjonen bare for å skille strenger i lekeplassens utgang.
Når lekeplassen er ferdig med å utføre koden, bør du se et resultat i sidefeltet som ligner på følgende.
Gratulerer. Du vet nå hvordan du henter JSON-data, serialiserer den, og bruker den som en vanlig ordbok i Swift-koden. Som du kan se, er prosessen veldig enkel takket være NSJSONSerialization
API, som gjør det meste av det harde arbeidet for oss.
I tillegg til å lese JSON-data, som du mottar fra en online kilde eller en lokal fil, er det også viktig å vite hvordan du lager din egen JSON-data. Hvorvidt dette skal lagres som en lokal fil eller, oftest, sendes til en webtjeneste, prosessen er det like enkelt og enkelt som å lese JSON-data. Ta en titt på følgende eksempel.
la validDictionary = ["numericalValue": 1, "stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5]] la invalidDictionary = ["date": NSDate ()] hvis NSJSONSerialization .isValidJSONObject (validDictionary) // True do let rawData = prøv NSJSONSerialization.dataWithJSONObject (validDictionary, alternativer: .PrettyPrinted) fangst // Handle Error hvis NSJSONSerialization.isValidJSONObject (invalidDictionary) // False // NSJSONSerialization. dataWithJSONObject (validDictionary, alternativer: .PrettyPrinted) vil produsere en feil hvis det kalles
Når du lager dine egne JSON-data fra et objekt, er det best å først bruke isValidJSONObject (_ :)
metode for å sjekke om objektet kan konverteres til et JSON objekt.
Etter denne innledende sjekken ringer du til dataWithJSONObject (_ :)
metode, som returnerer en NSData
objekt hvis det lykkes. Fordi vi allerede har sjekket om objektet er gyldig, er feilen eller ikke å fange
blokkering her er ikke så viktig som før, men kan fortsatt kalles på grunn av en intern API-feil når du lager de rå dataene.
De PrettyPrinted
alternativet som brukes i dette eksemplet, er det eneste alternativet som er tilgjengelig for bruk med denne metoden, og legger til, når det brukes, i mer hvitt plass til JSON-dataene for å gjøre det lettere å lese.
// Med PrettyPrinted Option: "navn": "John", "alder": 25 // Uten PrettyPrinted Option: "navn": "John", "alder": 25
Den returnerte NSData
objekt kan da brukes uansett. Du kan lagre den til en lokal fil eller sende den til en webtjeneste til.
Du bør nå være komfortabel med å jobbe med JSON i Swift. Det er klart at stjernespilleren er NSJSONSerialization
klasse, med litt hjelp fra noen få vakt
og gjør-fangst
uttalelser. Som du kan se, er det veldig enkelt å jobbe med JSON-data. Når JSON-dataene er analysert og serialisert, kan du samhandle med det akkurat som du ville med noe annet vanlig objekt.
Som alltid, vær sikker på å legge igjen dine kommentarer og tilbakemeldinger i kommentarene nedenfor.