En aquest tema, aprendrem a treballar amb dos formats de dades molt comuns en el desenvolupament d'aplicacions: JSON (JavaScript Object Notation) i XML (eXtensible Markup Language). Aquests formats s'utilitzen sovint per a l'intercanvi de dades entre aplicacions i serveis web.
JSON
Què és JSON?
JSON és un format lleuger d'intercanvi de dades que és fàcil de llegir i escriure per a humans, i fàcil de parsejar i generar per a màquines. JSON es basa en una col·lecció de parells clau-valor.
Exemple de JSON
{ "nom": "Joan", "edat": 30, "adreça": { "carrer": "Carrer Major", "ciutat": "Barcelona" }, "aficions": ["lectura", "esports"] }
Treballant amb JSON en Objective-C
Per treballar amb JSON en Objective-C, utilitzarem la classe NSJSONSerialization
per parsejar i generar dades JSON.
Parsejar JSON
NSString *jsonString = @"{\"nom\":\"Joan\",\"edat\":30,\"adreça\":{\"carrer\":\"Carrer Major\",\"ciutat\":\"Barcelona\"},\"aficions\":[\"lectura\",\"esports\"]}"; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *error; NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; if (error) { NSLog(@"Error parsejant JSON: %@", error.localizedDescription); } else { NSLog(@"Nom: %@", jsonDict[@"nom"]); NSLog(@"Edat: %@", jsonDict[@"edat"]); NSLog(@"Adreça: %@", jsonDict[@"adreça"][@"carrer"]); NSLog(@"Aficions: %@", jsonDict[@"aficions"]); }
Generar JSON
NSDictionary *dict = @{ @"nom": @"Joan", @"edat": @30, @"adreça": @{ @"carrer": @"Carrer Major", @"ciutat": @"Barcelona" }, @"aficions": @[@"lectura", @"esports"] }; NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; if (error) { NSLog(@"Error generant JSON: %@", error.localizedDescription); } else { NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSLog(@"JSON: %@", jsonString); }
XML
Què és XML?
XML és un llenguatge de marcatge que defineix un conjunt de regles per a l'estructuració de documents de manera que siguin llegibles tant per a humans com per a màquines. XML és extensible, el que significa que els usuaris poden definir els seus propis elements.
Exemple d'XML
<persona> <nom>Joan</nom> <edat>30</edat> <adreça> <carrer>Carrer Major</carrer> <ciutat>Barcelona</ciutat> </adreça> <aficions> <afició>lectura</afició> <afició>esports</afició> </aficions> </persona>
Treballant amb XML en Objective-C
Per treballar amb XML en Objective-C, utilitzarem la classe NSXMLParser
per parsejar dades XML.
Parsejar XML
NSString *xmlString = @"<persona><nom>Joan</nom><edat>30</edat><adreça><carrer>Carrer Major</carrer><ciutat>Barcelona</ciutat></adreça><aficions><afició>lectura</afició><afició>esports</afició></aficions></persona>"; NSData *xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding]; NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; parser.delegate = self; [parser parse];
Implementem els mètodes del delegat NSXMLParserDelegate
per gestionar els esdeveniments del parser:
@interface MyXMLParserDelegate : NSObject <NSXMLParserDelegate> @property (nonatomic, strong) NSMutableDictionary *result; @property (nonatomic, strong) NSMutableString *currentElementValue; @end @implementation MyXMLParserDelegate - (instancetype)init { self = [super init]; if (self) { _result = [NSMutableDictionary dictionary]; } return self; } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict { self.currentElementValue = [[NSMutableString alloc] init]; } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { [self.currentElementValue appendString:string]; } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { self.result[elementName] = self.currentElementValue; } - (void)parserDidEndDocument:(NSXMLParser *)parser { NSLog(@"Resultat: %@", self.result); } @end
Exercicis Pràctics
Exercici 1: Parsejar JSON
Escriu un programa que parsegi el següent JSON i imprimeixi el nom i les aficions de la persona.
{ "nom": "Maria", "edat": 25, "adreça": { "carrer": "Carrer Nou", "ciutat": "Girona" }, "aficions": ["música", "viatges"] }
Solució
NSString *jsonString = @"{\"nom\":\"Maria\",\"edat\":25,\"adreça\":{\"carrer\":\"Carrer Nou\",\"ciutat\":\"Girona\"},\"aficions\":[\"música\",\"viatges\"]}"; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *error; NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; if (error) { NSLog(@"Error parsejant JSON: %@", error.localizedDescription); } else { NSLog(@"Nom: %@", jsonDict[@"nom"]); NSLog(@"Aficions: %@", jsonDict[@"aficions"]); }
Exercici 2: Parsejar XML
Escriu un programa que parsegi el següent XML i imprimeixi el nom i les aficions de la persona.
<persona> <nom>Maria</nom> <edat>25</edat> <adreça> <carrer>Carrer Nou</carrer> <ciutat>Girona</ciutat> </adreça> <aficions> <afició>música</afició> <afició>viatges</afició> </aficions> </persona>
Solució
NSString *xmlString = @"<persona><nom>Maria</nom><edat>25</edat><adreça><carrer>Carrer Nou</carrer><ciutat>Girona</ciutat></adreça><aficions><afició>música</afició><afició>viatges</afició></aficions></persona>"; NSData *xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding]; NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; MyXMLParserDelegate *delegate = [[MyXMLParserDelegate alloc] init]; parser.delegate = delegate; [parser parse];
Conclusió
En aquesta secció, hem après a treballar amb JSON i XML en Objective-C. Hem vist com parsejar i generar dades JSON utilitzant NSJSONSerialization
i com parsejar dades XML utilitzant NSXMLParser
. Aquests coneixements són essencials per a l'intercanvi de dades entre aplicacions i serveis web. En el proper mòdul, explorarem el desenvolupament d'interfícies d'usuari amb UIKit.
Curs de Programació en Objective-C
Mòdul 1: Introducció a Objective-C
- Introducció a Objective-C
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Tipus de Dades i Variables
- Operadors i Expressions
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Mètodes
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Sintaxi de Mètodes en Objective-C
- Mètodes de Classe i d'Instància
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Gestió de Memòria
- Introducció a la Gestió de Memòria
- Comptatge Automàtic de Referències (ARC)
- Retenció i Alliberament Manual
- Millors Pràctiques de Gestió de Memòria
Mòdul 6: Temes Avançats
Mòdul 7: Treballant amb Dades
- Gestió d'Arxius
- Serialització i Deserialització
- Conceptes Bàsics de Xarxes
- Treballant amb JSON i XML
Mòdul 8: Desenvolupament d'Interfícies d'Usuari
- Introducció a UIKit
- Vistes i Controladors de Vista
- Disseny Automàtic
- Gestió de l'Entrada de l'Usuari