Travailler avec JSON dans Swift

Le format de données JSON est largement utilisé sur le Web moderne et constitue l’un des moyens les plus courants de transférer des données. De nombreuses API modernes, notamment les services Web RESTful, prennent en charge le format de données JSON..

Dans ce tutoriel, je vais vous montrer comment utiliser le format de données JSON dans le langage de programmation Swift sur iOS, tvOS, watchOS et OS X.

Conditions préalables

Ce tutoriel nécessite au moins Xcode 7, qui inclut la version 2 du langage de programmation Swift. Swift 2 a introduit un certain nombre d’ajouts importants que nous utiliserons dans ce tutoriel, tels que la gestion des erreurs et la garde déclaration.

1. Qu'est-ce que JSON??

Comme je l'ai mentionné, JSON est un format de données couramment utilisé pour la communication, par exemple, entre clients et serveurs. Il est populaire en raison de sa facilité d'utilisation sur pratiquement toutes les plateformes mobiles telles qu'iOS, Android, Windows Phone et les navigateurs Web..

L'extrait suivant est un exemple du format de données JSON. C'est l'extrait que nous allons utiliser dans ce tutoriel..

"dataTitle": "Tutoriel JSON!", "swiftVersion": 2.1 "utilisateurs": ["name": "John", "age": 25, "name": "Marque", "age": 29, "name": "Sarah", "age": 22],

Comme vous pouvez le constater, le format de données JSON est facile à comprendre. JSON est structuré à l'aide de deux types de collection, dictionnaires et tableaux. Les dictionnaires contiennent une ou plusieurs paires clé-valeur et sont entourés d'accolades., . Les tableaux contiennent une liste d'éléments commandés et sont entourés de crochets, []. Presque tous les langages de programmation définissent ces types de collection, raison pour laquelle JSON est pris en charge par presque tous les langages autour.

Voici une liste des types de données pris en charge dans un objet JSON:

  • Chaîne
  • Nombre (entier, float, double, etc.)
  • Booléen
  • Tableau
  • dictionnaire

Une des raisons pour lesquelles JSON est si populaire est qu’il est facile à lire par les humains et qu’il peut également être facilement analysé et sérialisé par des machines. L'analyse et la sérialisation ont lieu lorsque la machine prend des données brutes et les transforme en un objet utilisable par l'application.

2. Lecture de données JSON

Étape 1: Créer un terrain de jeu

Lancez Xcode et créez un nouveau terrain de jeu. Donnez un nom à la cour et définissez Plate-forme à iOS.

Étape 2: Ajouter des données JSON

Ouvrez le Navigateur à gauche et développez le JSON Cour de récréation. Faites un clic droit sur le Ressources dossier et sélectionnez Nouveau fichier du menu.

Nommez le fichier data.json et remplir le fichier avec le JSON suivant.

"utilisateurs": ["nom": "John", "age": 25, "nom": "Mark", "age": 29, "nom": "Sarah", "age" : 22], "dataTitle": "Didacticiel JSON!", "SwiftVersion": 2.1

Étape 3: Obtenir des données

Maintenant que vous avez compris les bases du format de données JSON, il est temps de commencer à les utiliser dans Swift. Supprimez le contenu du terrain de jeu et ajoutez-y les trois lignes de code suivantes.

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

Avec ce code, nous obtenons une référence au fichier JSON que nous avons ajouté au terrain de jeu il y a quelques instants et obtenons son contenu sous forme de données brutes. Notez que l'URL créée ici est une URL locale au fichier sur votre ordinateur. Cela pourrait être l'URL d'un service Web ou toute autre URL dont vous pourriez avoir besoin.

Il est également important de comprendre que les données brutes d'un objet JSON ne doivent pas nécessairement être collectées de cette manière. La seule partie essentielle est le brut NSData objet, qui peut provenir d'une URL, comme indiqué dans l'exemple, d'une réponse d'API ou d'une gamme d'autres sources.

Étape 4: Analyse des données

L'étape suivante consiste à analyser et à sérialiser ces données dans un objet que nous pouvons utiliser. Heureusement, sur iOS et OS X, la Fondation NSJSONSérialisation La classe gère tout le travail difficile d'analyse et de sérialisation pour vous. Ajoutez l'extrait de code suivant à votre terrain de jeu.

do let object = try NSJSONSerialization.JSONObjectWithData (data !, options: .AllowFragments) si let dictionary = object as? [Chaîne: AnyObject] readJSONObject (dictionnaire) catch // Erreur de traitement

Nous enfermons d’abord toute notre logique dans un attraper instruction, car la sérialisation à partir de données JSON peut générer une erreur. Ensuite, nous appelons le JSONObjectWithData (_: options :) méthode du NSJSONSérialisation classe, en passant dans le NSData objet et quelques options. Les options pouvant être passées sont définies par le NSJSONReadingOptions structure:

  • AllowFragments Cela permet de lire les objets du premier ou du niveau supérieur des données JSON qui ne sont ni des tableaux ni des dictionnaires. Dans les données JSON utilisées dans ce tutoriel, cela inclut à la fois le dataTitle et swiftVersion valeurs.
  • MutableLeaves Cette option permet de créer automatiquement des chaînes lues à partir des données JSON en tant qu’instances de NSMutableString. Cette option est plus pertinente pour le développement Objective-C. Dans Swift, vous pouvez ignorer cette option car les chaînes constituent un type de données de base intégré et sont automatiquement modifiables lorsqu'elles sont définies avec le paramètre. var mot-clé.
  • MutableContainers Cela permet aux tableaux et aux dictionnaires lus à partir des données JSON d'être mutables. Comme avec le MutableLeaves option, dans Swift, en utilisant le var mot-clé lors de l'affectation du tableau / dictionnaire à une variable le rend automatiquement mutable.

Enfin, nous vérifions si l’objet sérialisé est du type attendu [String: AnyObject] tapez et, si oui, appelez le readJSONObject (_ :) une fonction. Jetons un coup d'oeil au readJSONObject (_ :) méthode.

Étape 5: Travailler avec des données

Une fois que les données JSON que vous avez collectées ont été analysées et sérialisées, vous pouvez interagir avec elles comme vous le feriez avec tout autre dictionnaire. Ajoutez la fonction suivante à votre terrain de jeu au dessus de la attraper déclaration.

func readJSONObject (object: [String: AnyObject]) guard let title = object ["dataTitle"] comme? String, laissez version = object ["swiftVersion"] comme? Float, laissez les utilisateurs = objet ["utilisateurs"] comme? [[String: AnyObject]] else return _ = "Swift \ (version)" + titre pour l'utilisateur dans les utilisateurs gardez nom = utilisateur ["nom"] comme? String, laissez age = user ["age"] comme? Int autrement pause change l'âge cas 22: _ = nom + "est \ (âge) ans." cas 25: _ = nom + "a \ (âge) ans." cas 29: _ = nom + "a \ (âge) ans." défaut: pause

Comme vous pouvez le constater, les données JSON sérialisées peuvent être interagies exactement comme un dictionnaire ou un tableau classique. Ce qui précède readJSONObject (_ :) Cette fonction sert d'exemple pour extraire les informations d'un objet JSON sérialisé. Notez que j'ai inclus un commutateur déclaration dans la fonction simplement pour séparer les chaînes dans la sortie du terrain de jeu.

Une fois que le terrain de jeu a fini d’exécuter votre code, vous devriez voir un résultat dans la barre latérale semblable au suivant.

Toutes nos félicitations. Vous savez maintenant comment récupérer des données JSON, les sérialiser et les utiliser comme dictionnaire normal dans votre code Swift. Comme vous pouvez le constater, le processus est très simple grâce au NSJSONSérialisation API, qui fait le gros du travail pour nous.

3. Écrire des données JSON

Outre la lecture des données JSON que vous recevez d'une source en ligne ou d'un fichier local, il est également important de savoir comment créer vos propres données JSON. Que ce soit pour être enregistré en tant que fichier local ou, le plus souvent, pour être envoyé à un service Web, le processus est aussi simple et lisible que la lecture de données JSON. Regardez l'exemple suivant.

let validDictionary = ["numericalValue": 1, "stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5]] let invalidDictionary = ["date": NSDate ()] si NSJSONSerialization .isValidJSONObject (validDictionary) // True do let rawData = essayer NSJSONSerialization.dataWithJSONObject (validDictionary, options: .PrettyPrinted) intercepter // erreur de gestion si NSJSONSerialization.isValidJSONObject (invalidDictionary) // False // NSJSsection. dataWithJSONObject (validDictionary, options: .PrettyPrinted) générera une erreur s'il est appelé

Lors de la création de vos propres données JSON à partir d’un objet, il est préférable d’utiliser d’abord le isValidJSONObject (_ :) méthode pour vérifier si l'objet pouvez être converti en objet JSON.

Après cette vérification initiale, vous appelez le dataWithJSONObject (_ :) méthode, qui retourne un NSData object si réussi. Comme nous avons déjà vérifié si l'objet est valide ou non, l'erreur capture bloquer ici n'est pas aussi important qu'avant, mais peut toujours être appelé en raison d'une erreur d'API interne lors de la création des données brutes.

le PrettyPrinted L'option utilisée dans cet exemple est la seule option disponible avec cette méthode et, lorsqu'elle est utilisée, ajoute simplement plus d'espaces aux données JSON afin de faciliter la lecture..

// Avec l'option PrettyPrinted: "name": "John", "age": 25 // Sans l'option PrettyPrinted: "name": "John", "age": 25

Le rendu NSData objet peut alors être utilisé comme bon vous semble. Vous pouvez l’enregistrer dans un fichier local ou l’envoyer à un service Web à.

Conclusion

Vous devriez maintenant être à l'aise avec JSON dans Swift. Il est clair que le joueur vedette est le NSJSONSérialisation classe, avec un peu d'aide de quelques garde et attraper déclarations. Comme vous pouvez le constater, travailler avec des données JSON est très simple. Une fois les données JSON analysées et sérialisées, vous pouvez interagir avec elles comme vous le feriez avec tout autre objet standard..

Comme toujours, assurez-vous de laisser vos commentaires dans les commentaires ci-dessous.