Desarrollo iOS: Nuevo soporte de JSON en iOS 5

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:

  • parsear “a mano” el texto JSON
  • usar algún framework, que hay varios de código libre que andan muy bien.
  • 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:

    // consumimos el servicio JSON

    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 respectivamente
  • NSJSONReadingMutableLeaves: 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:

    NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@”Argentina”, @”Buenos Aires”, @”España”, @”Madrid”, @”Mexico”,@”DF”, nil];

    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

    0 0 votos
    Article Rating
    Subscribe
    Notify of
    0 Comments
    Opiniones Inline
    Ver todos los comentarios
    0
    Me encantaría saber tu opinión, por favor, deja un comentariox
    ()
    x