Neste artigo iremos ver como trabalhar com JSON (JavaScript Object Notation) no Objective-C. O JSON nada mais é do que uma coleção de chave/ valor. Nele podemos ter um objeto, ou um array de objetos.
Em nosso exemplo, iremos acessar uma url via HTTP que retorne um objeto JSON, e então, exibiremos os valores coletados para o usuário.
Configurando o JSON no Xcode
Infelizmente, o JSON não é nativo no Objective-C, então para isso a primeira coisa que devemos fazer é baixar a biblioteca aqui. No Xcode, crie um novo projeto do tipo View-Based-Application e dê o nome de JsonExemplo. Feito o download, arraste a pasta JSON para dentro do seu projeto no Xcode.
Consumindo o WebService
Com as devidas configurações feitas, vamos implementar o nosso código. No arquivo JSonExemploViewController.h declarei as seguintes propriedades e métodos:
#import <UIKit/UIKit.h>
@interface JsonExemploViewController : UIViewController
{
IBOutlet UILabel *lblTitulo;
IBOutlet UILabel *lblUrl;
}
@property (nonatomic, retain) UILabel *lblTitulo;
@property (nonatomic, retain) UILabel *lblUrl;
-(NSString *)stringWithUrl:(NSURL *)url;
- (id) objectWithUrl:(NSURL *)url;
@end
No arquivo JsonExemploViewController.m, façamos o seguinte:
- Import do JSON
(#import “JSON.h”) - Declare o Synthesize para os 2 labels criado acima
(@synthesize lblTitulo, lblUrl) - Implemente os dois métodos (stringWithUrl e objectWithUrl):
- (NSString *)stringWithUrl:(NSURL *)url{
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30];
NSData *urlData;
NSURLResponse *response;
NSError *error;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
return [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
}
- (id) objectWithUrl:(NSURL *)url{
SBJsonParser *jsonParser = [SBJsonParser new];
NSString *jsonString = [self stringWithUrl:url];
return [jsonParser objectWithString:jsonString error:NULL];
}
Em seguida adicionamos o seguinte bloco de código no método viewDidLoad:
- (void)viewDidLoad{
[super viewDidLoad];
id response = [self objectWithUrl:[NSURL URLWithString:@"http://jaiku.com/feed/json"]];
NSDictionary *retorno= (NSDictionary *)response;
lblTitulo.text = [retorno valueForKey:@"title"];
lblUrl.text = [retorno valueForKey:@"url"];
}
Para finalizar, basta apenas criar dois labels no arquivo JsonExemploViewController.xib e fazer as suas devidas conexões no File’s Owner.
Resultado final
(O endereço de retorno do Json está disponível na internet e foi retirado deste site)