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);
}
@endExercicis 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
