Trabajando con JSON en Swift

El formato de datos JSON se usa ampliamente en la web moderna y es una de las formas más comunes de transferir datos. Muchas API modernas, servicios web RESTful en particular, admiten el formato de datos JSON.

En este tutorial, te mostraré cómo trabajar con el formato de datos JSON en el lenguaje de programación Swift en iOS, tvOS, watchOS y OS X.

Prerrequisitos

Este tutorial requiere que esté ejecutando al menos Xcode 7, que incluye la versión 2 del lenguaje de programación Swift. Swift 2 ha introducido una serie de adiciones importantes que usaremos en este tutorial, como el manejo de errores y la Guardia declaración.

1. ¿Qué es JSON?

Como mencioné, JSON es un formato de datos comúnmente utilizado que se usa para la comunicación entre, por ejemplo, clientes y servidores. Es popular debido a su facilidad de uso en prácticamente cualquier plataforma móvil como iOS, Android, Windows Phone y navegadores web.

El siguiente fragmento de código es un ejemplo del formato de datos JSON. Este es el fragmento que usaremos en este tutorial..

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

Como puede ver, el formato de datos JSON es fácil de entender. JSON se estructura utilizando dos tipos de colecciones, diccionarios y matrices. Los diccionarios contienen uno o más pares de clave-valor y están encerrados entre llaves, . Las matrices contienen una lista de elementos ordenados y están encerrados entre corchetes, []. Casi todos los lenguajes de programación definen estos tipos de colección, por lo que JSON es compatible con casi todos los lenguajes..

La siguiente es una lista de los tipos de datos admitidos en un objeto JSON:

  • Cuerda
  • Número (entero, flotante, doble, etc.)
  • Booleano
  • Formación
  • Diccionario

Parte de la razón por la cual JSON es tan popular es porque es fácil de leer por los humanos y también puede ser analizado y serializado fácilmente por las máquinas. El análisis y la serialización se producen cuando la máquina toma datos sin procesar y los convierte en un objeto utilizable por la aplicación..

2. Leyendo datos JSON

Paso 1: Crear Zona de Juegos

Arranca Xcode y crea un nuevo parque infantil. Dale un nombre y un set al patio Plataforma a iOS.

Paso 2: Agregar datos JSON

Abre el Navegador a la izquierda y expandir el JSON patio de recreo. Haga clic derecho en el Recursos carpeta y seleccione Archivo nuevo del menu.

Nombra el archivo data.json y rellene el archivo con el siguiente JSON.

"usuarios": ["nombre": "Juan", "edad": 25, "nombre": "Marca", "edad": 29, "nombre": "Sarah", "edad" : 22], "dataTitle": "JSON Tutorial!", "SwiftVersion": 2.1

Paso 3: Obtención de datos

Ahora que tiene una comprensión básica de qué es el formato de datos JSON, es hora de comenzar a trabajar con él en Swift. Elimine el contenido del área de juegos y agregue las siguientes tres líneas de código.

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

Con este código, obtenemos una referencia al archivo JSON que agregamos al patio de recreo hace unos momentos y obtenemos su contenido como datos sin procesar. Tenga en cuenta que la URL que creamos aquí es una local al archivo en su computadora. Esta podría ser la URL de un servicio web o cualquier otra URL que pueda necesitar.

También es importante comprender que los datos sin procesar de un objeto JSON no tienen que recopilarse de esta manera. La única parte esencial es el crudo. NSData objeto, que podría provenir de una URL como se muestra en el ejemplo, una respuesta de la API, o de un rango de otras fuentes.

Paso 4: Análisis de datos

El siguiente paso es analizar y serializar estos datos en un objeto que podamos usar. Afortunadamente, en iOS y OS X, la Fundación NSJSONSerialización la clase maneja todo el trabajo duro de analizar y serializar por usted. Agregue el siguiente fragmento de código a su área de juegos.

do let object = try NSJSONSerialization.JSONObjectWithData (data, options: .AllowFragments) si let dictionary = object as? [String: AnyObject] readJSONObject (dictionary) catch // Handle Error

Primero encierramos toda nuestra lógica en un atrapar declaración, porque la serialización de los datos JSON tiene el potencial de generar un error. A continuación, llamamos a la JSONObjectWithData (_: opciones :) método de la NSJSONSerialización clase, pasando en el NSData Objeto y algunas opciones. Las opciones que se pueden pasar están definidas por el NSJSONReadingOptions estructura:

  • PermitirFragmentos Esto permite que se puedan leer objetos dentro del primer nivel o nivel superior de los datos JSON que no son matrices o diccionarios. En los datos JSON que se utilizan en este tutorial, esto incluye tanto la título de datos y SwiftVersion valores.
  • Hojas mutables Esta opción permite que las cadenas que se leen desde los datos JSON se creen automáticamente como instancias de NSMutableString. Esta opción es más relevante para el desarrollo de Objective-C. En Swift, puede ignorar esta opción ya que las cadenas son un tipo de datos básico incorporado y son mutables automáticamente cuando se definen con la var palabra clave.
  • Contenedores mutables Esto permite que las matrices y los diccionarios que se leen desde los datos de JSON también se puedan modificar. Como con el Hojas mutables opción, en Swift, utilizando el var La palabra clave al asignar la matriz / diccionario a una variable automáticamente lo hace mutable..

Por último, verificamos si el objeto serializado es del esperado [String: AnyObject] escriba y, si es así, llame al readJSONObject (_ :) función. Echemos un vistazo a la readJSONObject (_ :) método.

Paso 5: Trabajar con datos

Una vez que los datos JSON que ha recopilado se hayan analizado y serializado, puede interactuar con ellos como lo haría con cualquier otro diccionario. Agrega la siguiente función a tu patio encima la atrapar declaración.

func readJSONObject (object: [String: AnyObject]) guard let title = object ["dataTitle"] como? Cadena, deja la versión = objeto ["swiftVersion"] como? Flotar, dejar que los usuarios = objeto ["usuarios"] como? [[String: AnyObject]] else return _ = "Swift \ (versión)" + título para el usuario en los usuarios guard let name = user ["name"] como? Cadena, deja age = user ["age"] como? Int else break switch age caso 22: _ = nombre + "tiene \ (edad) años". caso 25: _ = nombre + "tiene \ (edad) años". caso 29: _ = nombre + "tiene \ (edad) años". por defecto: break

Como puede ver, los datos JSON serializados pueden interactuar de la misma manera que un diccionario o matriz regular. Lo anterior readJSONObject (_ :) La función sirve como ejemplo de cómo puede extraer la información de un objeto JSON serializado. Tenga en cuenta que he incluido un cambiar declaración en la función simplemente para separar las cadenas en la salida del patio de recreo.

Una vez que el patio de recreo haya terminado de ejecutar su código, debería ver un resultado en la barra lateral similar al siguiente.

Felicidades. Ahora sabe cómo obtener datos JSON, serializarlos y usarlos como un diccionario normal en su código Swift. Como puede ver, el proceso es muy sencillo gracias a la NSJSONSerialización API, que hace la mayor parte del trabajo duro para nosotros..

3. Escribir datos JSON

Además de leer los datos JSON, que recibe de una fuente en línea o un archivo local, también es importante saber cómo crear sus propios datos JSON. Ya sea para guardarlo como un archivo local o, más comúnmente, para enviarlo a un servicio web, el proceso es tan fácil y simple como leer datos JSON. Echa un vistazo al siguiente ejemplo..

let validDictionary = ["numericalValue": 1, "stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5]] let invalidDictionary = ["date": NSDate ()] if NSJSONSerialization .isValidJSONObject (validDictionary) // True do let rawData = try NSJSONSerialization.dataWithJSONObject (validDictionary, options: .PrettyPrinted) catch // Handle Erroricacceso en los casos de terceros. dataWithJSONObject (validDictionary, options: .PrettyPrinted) producirá un error si se llama

Al crear sus propios datos JSON a partir de un objeto, es mejor usar primero isValidJSONObject (_ :) método para comprobar si el objeto puede ser convertido en un objeto JSON.

Después de esta verificación inicial, usted llama al dataWithJSONObject (_ :) método, que devuelve un NSData objeto si tiene éxito. Como ya hemos comprobado si el objeto es válido o no, el error captura el bloque aquí no es tan importante como antes, pero aún se puede llamar debido a un error interno de la API al crear los datos sin procesar.

los Bonita impresa La opción utilizada en este ejemplo es la única opción disponible para usar con este método y, cuando se usa, simplemente agrega más espacio en blanco a los datos JSON para facilitar la lectura..

// Con la opción PrettyPrinted: "name": "John", "age": 25 // Sin la opción PrettyPrinted: "name": "John", "age": 25

El retorno NSData objeto puede ser utilizado como quieras. Puede guardarlo en un archivo local o enviarlo a un servicio web para.

Conclusión

Ahora deberías estar cómodo trabajando con JSON en Swift. Está claro que el jugador estrella es el NSJSONSerialización clase, con un poco de ayuda de unos pocos Guardia y atrapar declaraciones Como puede ver, trabajar con datos JSON es muy fácil. Una vez que los datos JSON se analizan y se serializan, puede interactuar con ellos como lo haría con cualquier otro objeto normal.

Como siempre, asegúrese de dejar sus comentarios y sugerencias en los comentarios a continuación.