Main Contents

[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)

11 Comments

  1. Dino (1 comments) février 23, 2010 @ 9 h 02 min

    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

  2. kraft (36 comments) février 23, 2010 @ 10 h 12 min

    Je pense que tu n as pas bien importer la classe. Ou que tu n’a pas faire le #import

  3. Teler (1 comments) juin 9, 2010 @ 16 h 15 min

    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 ?

  4. Ressources pour développements iPhone « Le blog de Thierry Faure septembre 18, 2010 @ 8 h 23 min

    […] Utilisation de JASON, côté client et côté serveur : http://www.jkraft.fr/2009/12/13/objective-c-json-et-iphone/ […]

  5. kraft (36 comments) juillet 27, 2011 @ 13 h 39 min

    Edit, car le projet est passé sur GitHub
    https://github.com/stig/json-framework/

  6. TinezBox (1 comments) juillet 29, 2011 @ 13 h 48 min

    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.

  7. kraft (36 comments) juillet 31, 2011 @ 13 h 45 min

    Oui effectivement, je viens de corriger. Merci

  8. franck (2 comments) janvier 13, 2012 @ 18 h 06 min

    J’obtiens 8 alerte
    initializer element is not a compile-time constant

    la première sur :
    SBJsonParser *parser = [[SBJsonParser alloc] init];

    merci

  9. kraft (36 comments) janvier 14, 2012 @ 0 h 28 min

    Je n’ai pas d’erreur. Avez vous bien inclu la librairie?

  10. Franck (2 comments) janvier 14, 2012 @ 1 h 24 min

    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 !

  11. kraft (36 comments) janvier 14, 2012 @ 9 h 33 min

    Oui ici : https://github.com/Jekar/jkraft-tuto

Leave a comment