En este módulo, aprenderemos a trabajar con dos de los formatos de datos más comunes en el desarrollo de aplicaciones: JSON (JavaScript Object Notation) y XML (eXtensible Markup Language). Estos formatos se utilizan ampliamente para la transmisión de datos entre un servidor y una aplicación cliente.

Objetivos del Módulo

  • Comprender qué son JSON y XML y sus diferencias.
  • Aprender a parsear (analizar) y generar JSON y XML en Objective-C.
  • Implementar ejemplos prácticos de manejo de JSON y XML.
  • Realizar ejercicios para reforzar los conceptos aprendidos.

  1. Introducción a JSON y XML

JSON

JSON es un formato de texto ligero para el intercambio de datos. Es fácil de leer y escribir para los humanos y fácil de parsear y generar para las máquinas. JSON se basa en una colección de pares clave/valor y listas ordenadas de valores.

Ejemplo de JSON:

{
  "nombre": "Juan",
  "edad": 30,
  "ciudad": "Madrid"
}

XML

XML es un lenguaje de marcado que define un conjunto de reglas para la codificación de documentos en un formato que es legible tanto para humanos como para máquinas. XML utiliza etiquetas para definir elementos de datos.

Ejemplo de XML:

<persona>
  <nombre>Juan</nombre>
  <edad>30</edad>
  <ciudad>Madrid</ciudad>
</persona>

Comparación entre JSON y XML

Característica JSON XML
Sintaxis Más simple y ligera Más compleja y verbosa
Legibilidad Alta Media
Soporte de Tipos de Datos Nativo (números, cadenas, booleanos, arrays, objetos) No nativo (todo es texto)
Uso Común APIs web, configuración Documentos, configuración, APIs web

  1. Parseo y Generación de JSON en Objective-C

Parseo de JSON

Para parsear JSON en Objective-C, utilizamos la clase NSJSONSerialization.

Ejemplo de Parseo de JSON:

NSString *jsonString = @"{\"nombre\":\"Juan\",\"edad\":30,\"ciudad\":\"Madrid\"}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];

if (!error) {
    NSLog(@"Nombre: %@", jsonDict[@"nombre"]);
    NSLog(@"Edad: %@", jsonDict[@"edad"]);
    NSLog(@"Ciudad: %@", jsonDict[@"ciudad"]);
} else {
    NSLog(@"Error al parsear JSON: %@", error.localizedDescription);
}

Generación de JSON

Para generar JSON a partir de un diccionario o array, también utilizamos NSJSONSerialization.

Ejemplo de Generación de JSON:

NSDictionary *persona = @{
    @"nombre": @"Juan",
    @"edad": @30,
    @"ciudad": @"Madrid"
};

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:persona options:NSJSONWritingPrettyPrinted error:&error];

if (!error) {
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"JSON generado: %@", jsonString);
} else {
    NSLog(@"Error al generar JSON: %@", error.localizedDescription);
}

  1. Parseo y Generación de XML en Objective-C

Parseo de XML

Para parsear XML en Objective-C, utilizamos la clase NSXMLParser.

Ejemplo de Parseo de XML:

NSString *xmlString = @"<persona><nombre>Juan</nombre><edad>30</edad><ciudad>Madrid</ciudad></persona>";
NSData *xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
parser.delegate = self;
[parser parse];

Implementación del Delegado de NSXMLParser:

@interface MyXMLParserDelegate : NSObject <NSXMLParserDelegate>
@property (nonatomic, strong) NSMutableDictionary *currentElement;
@property (nonatomic, strong) NSMutableString *currentValue;
@end

@implementation MyXMLParserDelegate

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict {
    self.currentValue = [[NSMutableString alloc] init];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    [self.currentValue appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if (!self.currentElement) {
        self.currentElement = [[NSMutableDictionary alloc] init];
    }
    self.currentElement[elementName] = self.currentValue;
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
    NSLog(@"XML parseado: %@", self.currentElement);
}

@end

Generación de XML

Para generar XML, podemos construir manualmente la cadena XML.

Ejemplo de Generación de XML:

NSDictionary *persona = @{
    @"nombre": @"Juan",
    @"edad": @"30",
    @"ciudad": @"Madrid"
};

NSMutableString *xmlString = [[NSMutableString alloc] initWithString:@"<persona>"];
[xmlString appendFormat:@"<nombre>%@</nombre>", persona[@"nombre"]];
[xmlString appendFormat:@"<edad>%@</edad>", persona[@"edad"]];
[xmlString appendFormat:@"<ciudad>%@</ciudad>", persona[@"ciudad"]];
[xmlString appendString:@"</persona>"];

NSLog(@"XML generado: %@", xmlString);

  1. Ejercicios Prácticos

Ejercicio 1: Parsear JSON

Dado el siguiente JSON, parsearlo y extraer los valores de "nombre" y "edad":

{
  "nombre": "Ana",
  "edad": 25,
  "ciudad": "Barcelona"
}

Solución:

NSString *jsonString = @"{\"nombre\":\"Ana\",\"edad\":25,\"ciudad\":\"Barcelona\"}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];

if (!error) {
    NSLog(@"Nombre: %@", jsonDict[@"nombre"]);
    NSLog(@"Edad: %@", jsonDict[@"edad"]);
} else {
    NSLog(@"Error al parsear JSON: %@", error.localizedDescription);
}

Ejercicio 2: Generar XML

Dado el siguiente diccionario, generar una cadena XML:

NSDictionary *persona = @{
    @"nombre": @"Carlos",
    @"edad": @"28",
    @"ciudad": @"Valencia"
};

Solución:

NSMutableString *xmlString = [[NSMutableString alloc] initWithString:@"<persona>"];
[xmlString appendFormat:@"<nombre>%@</nombre>", persona[@"nombre"]];
[xmlString appendFormat:@"<edad>%@</edad>", persona[@"edad"]];
[xmlString appendFormat:@"<ciudad>%@</ciudad>", persona[@"ciudad"]];
[xmlString appendString:@"</persona>"];

NSLog(@"XML generado: %@", xmlString);

Conclusión

En este módulo, hemos aprendido a trabajar con JSON y XML en Objective-C. Hemos visto cómo parsear y generar ambos formatos de datos, y hemos implementado ejemplos prácticos para reforzar los conceptos. Estos conocimientos son fundamentales para el desarrollo de aplicaciones que interactúan con APIs y servicios web. En el próximo módulo, exploraremos el desarrollo de interfaces de usuario utilizando UIKit.

© Copyright 2024. Todos los derechos reservados