JSON-dataformatet används ofta över den moderna webben och det är ett av de vanligaste sätten att överföra data. Många moderna API-er, särskilt RESTful-webbtjänster, stöder JSON-dataformatet.
I den här handledningen visar jag dig hur du ska arbeta med JSON-dataformatet i Swift-programmeringsspråket på iOS, tvOS, watchOS och OS X.
Denna handledning kräver att du kör minst Xcode 7, som innehåller version 2 i Swift programmeringsspråket. Swift 2 har infört ett antal viktiga tillägg som vi ska använda i denna handledning, till exempel felhantering och vakt
påstående.
Som jag nämnde är JSON ett vanligt datformat som används för kommunikation mellan exempelvis kunder och servrar. Den är populär på grund av användbarheten på nästan vilken mobil plattform som iOS, Android, Windows Phone och webbläsare.
Följande kod är ett exempel på JSON-dataformatet. Detta är den kod som vi ska använda i den här handledningen.
"dataTitle": "JSON Tutorial!", "swiftVersion": 2.1 "användare": ["namn": "John", "ålder": 25, "namn": "Markera", "ålder" 29, "namn": "Sarah", "ålder": 22],
Som du kan se är JSON-dataformatet lätt att förstå. JSON är strukturerad med två insamlingstyper, ordböcker och arrays. Ordböcker innehåller ett eller flera av nyckelvärdespar och är inneslutna av lockiga axlar, . Arrayer innehåller en lista över beställda föremål och bifogas med kvadratfästen,
[]
. Nästan varje programmeringsspråk definierar dessa samlingstyper, varför JSON stöds av nästan alla språk runt.
Nedan följer en lista över de stödda datatyperna i ett JSON-objekt:
En del av anledningen till att JSON är så populär är att det är lätt att läsa av människor och det kan också enkelt analyseras och serialiseras av maskiner. Parsing och serialisering är när maskinen tar in rådata och omvandlar det till ett objekt som kan användas av programmet.
Avfyra Xcode och skapa en ny lekplats. Ge lekplatsen ett namn och set Plattform till iOS.
Öppna Navigatör till vänster och expandera JSON lekplats. Högerklicka på Medel mapp och välj Ny fil från menyn.
Namnge filen data.json och fyll i filen med följande JSON.
"name": "mark", "ålder": 29, "namn": "Sarah", "ålder" : 22], "dataTitle": "JSON Tutorial!", "SwiftVersion": 2.1
Nu när du har en grundläggande förståelse för vad JSON-datformatet är, är det dags att börja arbeta med det i Swift. Ta bort innehållet på lekplatsen och lägg till följande tre rader av kod till den.
Importera UIKit låt url = NSBundle.mainBundle (). URLForResource ("Data", medExtension: "json") låt data = NSData (contentOfURL: url!)
Med den här koden får vi en referens till den JSON-fil som vi lagt till på lekplatsen för några minuter sedan och får dess innehåll som rådata. Observera att webbadressen vi skapar här är en lokal till filen på din dator. Det här kan vara webbadressen till en webbtjänst eller någon annan webbadress du behöver.
Det är också viktigt att förstå att de råa uppgifterna för ett JSON-objekt inte behöver samlas på detta sätt. Den enda väsentliga delen är den råa NSData
objekt som kan komma från en URL som visas i exemplet, ett API-svar eller från en rad andra källor.
Nästa steg är att analysera och serialisera denna data till ett objekt vi kan använda. Lyckligtvis, på IOS och OS X, stiftelsen NSJSONSerialization
klassen hanterar allt det svåra arbetet med att analysera och serialisera för dig. Lägg till följande kodbit till din lekplats.
gör let object = försök NSJSONSerialization.JSONObjectWithData (data !, alternativ: .AllowFragments) om låt dictionary = objekt som? [String: AnyObject] readJSONObject (ordbok) fånga // Handle Error
Vi bifogar all vår logik först i en göra bifångst
uttalande, eftersom serialiseringen från JSON-data har potential att kasta ett fel. Därefter kallar vi JSONObjectWithData (_: alternativ :)
metod för NSJSONSerialization
klass, passerar i NSData
objekt och några alternativ. Alternativen som kan skickas in definieras av NSJSONReadingOptions
strukturera:
AllowFragments
Detta möjliggör föremål inom den första eller översta nivån av JSON-data som inte är arrays eller ordböcker som ska läsas. I den JSON-data som används i denna handledning ingår detta både i dataTitle
och swiftVersion
värden.MutableLeaves
Med det här alternativet kan strängar läsas från JSON-data som automatiskt skapas som instanser av NSMutableString
. Detta alternativ är mer relevant för mål-C-utveckling. I Swift kan du ignorera det här alternativet eftersom strängar är en inbyggd grundläggande datatyp och automatiskt kan ändras när de definieras med var
nyckelord.MutableContainers
Detta gör det möjligt för arrays och ordböcker att läsas från JSON-data för att också vara mutable. Som med MutableLeaves
alternativet, i Swift, med hjälp av var
sökord när man matar matrisen / ordboken till en variabel gör den automatiskt muterbar.Slutligen kontrollerar vi för att se om det seriella objektet är av den förväntade [String: AnyObject]
skriv och, om så är fallet, ringa till readJSONObject (_ :)
fungera. Låt oss ta en titt på readJSONObject (_ :)
metod.
När de JSON-data du har samlat har analyserats och serialiserats kan du interagera med det precis som du skulle med någon annan ordlista. Lägg till följande funktion på din lekplats ovan de göra bifångst
påstående.
func readJSONObject (objekt: [String: AnyObject]) guard let title = objekt ["dataTitle"] som? String, låt version = objekt ["swiftVersion"] som? Float, låt användare = objektera ["användare"] som? [[String: AnyObject]] else return _ = "Swift \ (version)" + titel för användare i användare guard let name = user ["name"] som? String, låt ålder = användare ["ålder"] som? Int else break switch ålder fall 22: _ = namn + "är \ (ålder) år gammal." fall 25: _ = namn + "är \ (ålder) år gammal." fall 29: _ = namn + "är \ (ålder) år gammal." standard: break
Som du kan se kan den serialiserade JSON-data interagera på exakt samma sätt som en vanlig ordbok eller array. Ovanstående readJSONObject (_ :)
funktionen fungerar som ett exempel på hur du kan extrahera informationen från ett serialiserat JSON-objekt. Observera att jag inkluderade en växla
uttalande i funktionen helt enkelt för att skilja strängarna i lekplatsens utgång.
När lekplatsen har slutfört din kod bör du se ett resultat i sidofältet som liknar följande.
Grattis. Du vet nu hur du hämtar JSON-data, serialiserar den och använder den som en vanlig ordbok i din Swift-kod. Som du kan se är processen mycket enkel tack vare NSJSONSerialization
API, vilket gör det mesta av det hårda arbetet för oss.
Förutom att läsa JSON-data, som du får från en online-källa eller en lokal fil, är det också viktigt att veta hur man skapar egna JSON-data. Om det här ska sparas som en lokal fil eller, oftast, skickas till en webbtjänst, bearbetar den det lika enkelt och enkelt som att läsa JSON-data. Ta en titt på följande exempel.
låt validDictionary = ["numericalValue": 1, "stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5]] låt invalidDictionary = ["date": NSDate ()] om NSJSONSerialization .isValidJSONObject (validDictionary) // True do let RawData = prova NSJSONSerialization.dataWithJSONObject (validDictionary, options: .PrettyPrinted) fånga // Handle Error om NSJSONSerialization.isValidJSONObject (invalidDictionary) // False // NSJSONSerialization. dataWithJSONObject (validDictionary, options: .PrettyPrinted) kommer att ge ett fel om det kallas
När du skapar din egen JSON-data från ett objekt är det bäst att först använda isValidJSONObject (_ :)
metod för att kontrollera om objektet kan omvandlas till ett JSON-objekt.
Efter denna första kontroll, ringer du på dataWithJSONObject (_ :)
metod som returnerar en NSData
objekt om det är framgångsrikt. Eftersom vi redan har kontrollerat om objektet är giltigt, är felet fånga
block här är inte lika viktigt som tidigare men kan fortfarande kallas på grund av ett internt API-fel när du skapar de råa data.
De PrettyPrinted
Alternativet som används i det här exemplet är det enda alternativet som är tillgängligt att använda med den här metoden och, när det används, läggs helt enkelt till i mer whitespace till JSON-data så att det blir lättare att läsa.
// Med PrettyPrinted Alternativ: "namn": "John", "ålder": 25 // Utan PrettyPrinted Alternativ: "namn": "John", "ålder": 25
Den återvände NSData
objekt kan sedan användas men du vill. Du kan spara den till en lokal fil eller skicka den till en webbtjänst till.
Du borde nu vara bekväm att jobba med JSON i Swift. Det är uppenbart att stjärnspelaren är NSJSONSerialization
klass, med lite hjälp från några vakt
och göra bifångst
uttalanden. Som du kan se är det väldigt lätt att arbeta med JSON-data. När JSON-data analyseras och serialiseras kan du interagera med det precis som du skulle med något annat vanligt föremål.
Som alltid, var noga med att lämna dina kommentarer och feedback i kommentarerna nedan.