[Objective-c] JSON et iPhone
juillet 31, 2011
Après avoir vu les webservices en SOAP. J’ai testé le JSON. Pour ceux ne connaissant pas, c’est une autre façon de coder des informations pour les envoyer d’un endroit à un autre, plus de détails par la : http://fr.wikipedia.org/wiki/JSON
Au final c’est encore plus simple, d’autant plus qu’une librairie existe pour le parser.
On va faire un petit exemple pour que vous compreniez.
L’objectif est de récupérer les tweets et leurs informations qui sont sur cette page de Twitter :
http://twitter.com/statuses/public_timeline.json
Première chose il faut télécharger la librairie:
Edit: la nouvelle adresse puisque le projet est passé sur GitHub
https://github.com/stig/json-framework/
Ensuite créer un projet iPhone, par exemple un View-Based-Application et importer le dossier Classes qui est dans l’image téléchargée (cocher la case « copier les fichiers »). Vous y trouverez plusieurs versions de la librairie en fonction du type de logiciel que vous développez (iPhone, OS X etc.) et même le framework à rajouter à Xcode.
Ensuite rajoutez un :
1 | #import "SBJson.h" |
Et voilà un exemple de code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Creation du parser SBJsonParser *parser = [[SBJsonParser alloc] init]; // Construction de l'url à récupérer NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://twitter.com/statuses/public_timeline.json"]]; // execution de la requête et récupération du JSON via un objet NSData NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; // On récupère le JSON en NSString depuis la réponse NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; // on parse la reponse JSON NSArray *statuses = [parser objectWithString:json_string error:nil]; for (NSDictionary *status in statuses) { // on peut recuperer les valeurs en utilisant objectForKey à partir du status qui est un NSDictionary // on log le tweet et le nom de l utilisateur NSLog(@"%@ - %@", [status objectForKey:@"text"], [[status objectForKey:@"user"] objectForKey:@"screen_name"]); } |
On voit donc apparaitre dans les logs les informations et tout ça très simplement et en peu de lignes.
Catégorie(s): Développement, Iphone, Objective-C, Tutorial | Comments (11)
Bonjour à toi,
j’ai essayer en vain de faire marcher JSON sur mon appli, il me dis cette erreur quan dje compile :
« .objc_class_name_SBJSON », referenced from:
literal-pointer@__OBJC@__cls_refs@SBJSON in Accueil_fen1.o
Pourtant je l’ai importer et je ne vois pas quoi faire pour l’instant
Je pense que tu n as pas bien importer la classe. Ou que tu n’a pas faire le #import
tu donne comme exemple cette adresse
http://twitter.com/statuses/public_timeline.json
mais sur tweeter il n’y a pas de .json ?
comment récupérer des données de n’importe quel site ?
[…] Utilisation de JASON, côté client et côté serveur : http://www.jkraft.fr/2009/12/13/objective-c-json-et-iphone/ […]
Edit, car le projet est passé sur GitHub
https://github.com/stig/json-framework/
Le code donné ci-dessus ne marche plus.
La librairie est divisé maintenant en deux classes, SBJsonParser et SBJsonWriter.
Il faut donc remplacer le SBJSON par SBJsonParser.
Oui effectivement, je viens de corriger. Merci
J’obtiens 8 alerte
initializer element is not a compile-time constant
la première sur :
SBJsonParser *parser = [[SBJsonParser alloc] init];
merci
Je n’ai pas d’erreur. Avez vous bien inclu la librairie?
Oui, j’ai bien ajouté la librairie !
Avez-vous un zip du projet pour que je compare!
J’ai sûrement fait une erreur quelque part !
Merci de votre aide et de votre réponse !
Oui ici : https://github.com/Jekar/jkraft-tuto