Si has tenido que lidiar con JSON, generalmente al consumir Webservices / REST APIs, como la de Twitter, Facebook, Panoramio, etc., sabes que en iOS teníamos dos alternativas:
La novedad es que Apple a incluido en iOS 5 el soporte para JSON de la mano de la clase NSJSONSerialization.
NSJSONSerialization
se encarga de convertir un texto JSON en clases Fundation NSDictionary
, NSArray
y NSString
. Además resuelve la conversión inversa: la generación de texto JSON a partir de las mismas clases citadas.
Realmente el uso es muy muy simple.
Como un ejemplo es mejor que mil palabras, les voy a mostrar 2 casos reales.
Parseo de JSON
Vamos a leer los 5 primeros twits del timeline público de Twitter y convertir el resultado JSON en un diccionario:
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@»http://api.twitter.com/1/statuses/public_timeline.json?count=5″]];
// parseo y creación del diccionario
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@»Dictionary:n%@», dict);
El parámetro options admite 3 flags que instruyen al parser cómo crear los objetos Fundation:
NSJSONReadingMutableContainers
: crea diccionarios y arrays en sus variantes mutables: NSMutableDictionary y NSMutableArray respectivamenteNSJSONReadingMutableLeaves
: crea mutables a los strings (NSMutableString
)NSJSONReadingAllowFragments
: admite que los objetos top-level no sean NSDictionary
ni NSArray
Como ven, en una línea de código tenemos resuelto el problema.
Generación de texto JSON
En el siguiente ejemplo creo un diccionario simple (paises y capitales) y se lo paso al serializador que creará un string JSON bien formado. Noten como la construcción la hago ordenada alfabéticamente por país y el JSON generado no necesariamente tiene ese orden:
NSString *jsonStr = [[[NSString alloc] initWithData:
[NSJSONSerialization dataWithJSONObject:dictionary
options:NSJSONWritingPrettyPrinted
error:nil]
encoding:NSUTF8StringEncoding] autorelease];
NSLog(@»%@», jsonStr);
He usado el flag NSJSONWritingPrettyPrinted
para crear un texto JSON indentando y óptimo para visualización “humana”. Si omitimos este flag (pasamos un 0), el JSON generado será más compacto e ideal para términos computacionales.
Tanto para leer como para escribir, NSJSONSerialization
tiene métodos que trabajan con NSStream
.
Para terminar, cuando necesitemos revisar si el JSON está bien formado, disponemos del método isValidJSONObject
.
Recuerden que todo esto es válido para iOS 5. Si tienes que generar código para versiones anteriores de iOS, recomiendo el framework SBJSON.
Hasta la próxima!.
Un artículo de Angel Traversi
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.