Lavorare con JSON in Swift

Il formato dei dati JSON è ampiamente utilizzato nel Web moderno ed è uno dei metodi più comuni per trasferire i dati. Molte API moderne, i servizi web RESTful in particolare, supportano il formato dati JSON.

In questo tutorial, ti mostrerò come lavorare con il formato dati JSON nel linguaggio di programmazione Swift su iOS, tvOS, watchOS e OS X.

Prerequisiti

Questo tutorial richiede che tu stia eseguendo almeno Xcode 7, che include la versione 2 del linguaggio di programmazione Swift. Swift 2 ha introdotto una serie di importanti aggiunte che useremo in questo tutorial, come la gestione degli errori e il guardia dichiarazione.

1. Che cos'è JSON?

Come ho già detto, JSON è un formato di dati comunemente usato che viene utilizzato per la comunicazione tra, ad esempio, client e server. È popolare grazie alla sua utilizzabilità praticamente su qualsiasi piattaforma mobile come iOS, Android, Windows Phone e browser web.

Il seguente frammento è un esempio del formato dati JSON. Questo è lo snippet che useremo in questo tutorial.

"dataTitle": "JSON Tutorial!", "swiftVersion": 2.1 "users": ["name": "John", "age": 25, "name": "Mark", "age": 29, "nome": "Sarah", "età": 22],

Come puoi vedere, il formato dei dati JSON è facile da capire. JSON è strutturato utilizzando due tipi di raccolta, dizionari e matrici. I dizionari contengono una o più coppie chiave-valore e sono racchiuse da parentesi graffe, . Gli array contengono un elenco di elementi ordinati e sono racchiusi tra parentesi quadre, []. Quasi tutti i linguaggi di programmazione definiscono questi tipi di raccolta, motivo per cui JSON è supportato da quasi tutte le lingue.

Di seguito è riportato un elenco dei tipi di dati supportati in un oggetto JSON:

  • Stringa
  • Numero (intero, float, doppio, ecc.)
  • booleano
  • schieramento
  • Dizionario

Parte del motivo per cui JSON è così popolare è perché è facile da leggere dagli umani e può anche essere facilmente analizzato e serializzato dalle macchine. L'analisi e la serializzazione si verificano quando la macchina acquisisce dati non elaborati e li trasforma in un oggetto utilizzabile dall'applicazione.

2. Lettura dei dati JSON

Passaggio 1: Crea un parco giochi

Accendi Xcode e crea un nuovo parco giochi. Dai al parco giochi un nome e un set piattaforma a iOS.

Passaggio 2: Aggiungi dati JSON

Apri il Navigatore a sinistra ed espandere il JSON terreno di gioco. Fare clic con il tasto destro del mouse su risorse cartella e selezionare Nuovo file dal menu.

Nominare il file data.json e popolare il file con il seguente JSON.

"users": ["name": "John", "age": 25, "name": "Mark", "age": 29, "name": "Sarah", "age" : 22], "dataTitle": "JSON Tutorial!", "SwiftVersion": 2.1

Passaggio 3: acquisizione dei dati

Ora che hai una conoscenza di base di ciò che è il formato dati JSON, è ora di iniziare a lavorarci con Swift. Rimuovi il contenuto del parco giochi e aggiungi le seguenti tre righe di codice.

import UIKit let url = NSBundle.mainBundle (). URLForResource ("Data", withExtension: "json") let data = NSData (contentsOfURL: url!)

Con questo codice, otteniamo un riferimento al file JSON che abbiamo aggiunto al parco giochi pochi istanti fa e otteniamo i suoi contenuti come dati non elaborati. Nota che l'URL che creiamo qui è locale al file sul tuo computer. Questo potrebbe essere l'URL di un servizio web o qualsiasi altro URL che potrebbe essere necessario.

È anche importante capire che i dati grezzi di un oggetto JSON non devono essere raccolti in questo modo. L'unica parte essenziale è il raw NSData oggetto, che potrebbe provenire da un URL come mostrato nell'esempio, una risposta API o da una serie di altre fonti.

Passaggio 4: analisi dei dati

Il prossimo passo è analizzare e serializzare questi dati in un oggetto che possiamo usare. Fortunatamente, su iOS e OS X, la Fondazione NSJSONSerialization class gestisce tutto il duro lavoro di analisi e serializzazione per te. Aggiungi il seguente snippet di codice al tuo parco giochi.

do let object = prova NSJSONSerialization.JSONObjectWithData (dati !, opzioni: .AllowFragments) se let dictionary = object as? [String: AnyObject] readJSONObject (dictionary) catch // Handle Error

Prima racchiudiamo tutta la nostra logica in a fare catture dichiarazione, perché la serializzazione dai dati JSON ha il potenziale di generare un errore. Successivamente, chiamiamo il JSONObjectWithData (_: opzioni :) metodo del NSJSONSerialization classe, passando nel NSData oggetto e alcune opzioni. Le opzioni che possono essere inoltrate sono definite da NSJSONReadingOptions struttura:

  • AllowFragments Ciò consente agli oggetti all'interno del primo o del primo livello dei dati JSON che non sono matrici o dizionari da leggere. Nei dati JSON utilizzati in questo tutorial, questo include sia il file dataTitle e swiftVersion valori.
  • MutableLeaves Questa opzione consente di creare stringhe in lettura dai dati JSON da creare automaticamente come istanze di NSMutableString. Questa opzione è più rilevante per lo sviluppo di Objective-C. In Swift, puoi ignorare questa opzione poiché le stringhe sono un tipo di dati di base incorporato e sono automaticamente mutabili quando definite con var parola chiave.
  • MutableContainers Ciò consente anche la possibilità di modificare gli array e i dizionari letti dai dati JSON. Come con il MutableLeaves opzione, in Swift, usando il var parola chiave quando si assegna l'array / dizionario a una variabile lo rende automaticamente mutabile.

Infine, controlliamo se l'oggetto serializzato è del previsto [String: AnyObject] digita e, in tal caso, chiama il readJSONObject (_ :) funzione. Diamo un'occhiata al readJSONObject (_ :) metodo.

Passaggio 5: Lavorare con i dati

Una volta che i dati JSON raccolti sono stati analizzati e serializzati, puoi interagire con esso come faresti con qualsiasi altro dizionario. Aggiungi la seguente funzione al tuo parco giochi sopra il fare catture dichiarazione.

func readJSONObject (object: [String: AnyObject]) guard lascia title = object ["dataTitle"] come? String, lascia version = object ["swiftVersion"] come? Float, consenti agli utenti = oggetto ["utenti"] come? [[String: AnyObject]] else return _ = "Swift \ (version)" + titolo per l'utente negli utenti guardia let nome = utente ["nome"] come? String, lascia age = user ["age"] come? Int altro break cambia età caso 22: _ = nome + "è \ (età) anni." caso 25: _ = nome + "è \ (età) anni". caso 29: _ = nome + "è \ (età) anni". impostazione predefinita: interruzione

Come puoi vedere, i dati JSON serializzati possono essere interagiti esattamente nello stesso modo di un normale dizionario o array. Quanto sopra readJSONObject (_ :) la funzione è un esempio di come è possibile estrarre le informazioni da un oggetto JSON serializzato. Si noti che ho incluso un interruttore affermazione nella funzione semplicemente per separare le stringhe nell'output del playground.

Una volta che il parco giochi ha terminato di eseguire il codice, dovresti vedere un risultato nella barra laterale simile al seguente.

Congratulazioni. Ora sai come recuperare i dati JSON, serializzarli e usarli come un normale dizionario nel tuo codice Swift. Come puoi vedere, il processo è molto semplice grazie a NSJSONSerialization API, che fa la maggior parte del duro lavoro per noi.

3. Scrittura di dati JSON

Oltre a leggere i dati JSON, che ricevi da una fonte online o da un file locale, è anche importante sapere come creare i tuoi dati JSON. Se questo deve essere salvato come file locale o, più comunemente, da inviare a un servizio Web, il processo è altrettanto facile e semplice della lettura dei dati JSON. Dai un'occhiata al seguente esempio.

let validDictionary = ["numericalValue": 1, "stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5]] let invalidDictionary = ["date": NSDate ()] se NSJSONSerialization .isValidJSONObject (validDictionary) // True do let rawData = prova NSJSONSerialization.dataWithJSONObject (validDictionary, opzioni: .PrettyPrinted) catch // Handle Error se NSJSONSerialization.isValidJSONObject (invalidDictionary) // False // NSJSONSerialization. dataWithJSONObject (validDictionary, options: .PrettyPrinted) genererà un errore se chiamato

Quando si creano i propri dati JSON da un oggetto, è preferibile utilizzare prima il isValidJSONObject (_ :) metodo per verificare se l'oggetto può essere convertito in un oggetto JSON.

Dopo questo controllo iniziale, chiami il dataWithJSONObject (_ :) metodo, che restituisce un NSData oggetto se ha successo. Perché abbiamo già controllato se l'oggetto è valido o meno, l'errore catturare il blocco qui non è così importante come prima ma potrebbe ancora essere chiamato a causa di un errore API interno durante la creazione dei dati grezzi.

Il PrettyPrinted l'opzione utilizzata in questo esempio è l'unica opzione disponibile per l'uso con questo metodo e, quando viene utilizzata, aggiunge semplicemente più spazi bianchi ai dati JSON per facilitare la lettura.

// Con l'opzione PrettyPrinted: "name": "John", "age": 25 // Senza l'opzione PrettyPrinted: "name": "John", "age": 25

Il ritorno NSData l'oggetto può quindi essere usato come preferisci. È possibile salvarlo su un file locale o inviarlo a un servizio Web su.

Conclusione

Ora dovresti sentirti a tuo agio a lavorare con JSON in Swift. È chiaro che il giocatore stella è il NSJSONSerialization classe, con un piccolo aiuto da pochi guardia e fare catture dichiarazioni. Come puoi vedere, lavorare con i dati JSON è molto semplice. Una volta che i dati JSON sono stati analizzati e serializzati, puoi interagire con esso proprio come faresti con qualsiasi altro oggetto normale.

Come sempre, assicurati di lasciare i tuoi commenti e feedback nei commenti qui sotto.