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.

© Copyright 2024. Tots els drets reservats