03 Fev, 2012 21:27

Usando JSON no iOS 5

Com a chegada do iOS 5, foi liberada para nós a classe NSJSONSerialization. Não precisa fazer nenhum import especial, pois ela vem no Foundation framework.

O funcionamento é muito semelhante a da solução antiga, ou seja, a partir de um conteúdo JSON, o NSJSONSerialization cria NSArrays, NSDictionaries, NSStrings, NSNumbers e NSNulls.

Supondo que você tenha o JSON abaixo em um NSData (de um arquivo ou baixado de algum site):

[
    {
        "nome": "Cine Mobits",
        "ano_lancamento": 2008,
        "ipad": false,
        "link": "http://www.cinemobits.com.br"
    },
    {
        "nome": "Mobits Button Soccer",
        "ano_lancamento": 2009,
        "ipad": false,
        "link": "http://www.mobitsbuttonsoccer.com"
    },
    {
        "nome": "The Lost Puzzles",
        "ano_lancamento": 2010,
        "ipad": false,
        "link": "http://www.thelostpuzzles.com"
    },
    {
        "nome": "The Hungry Pets",
        "ano_lancamento": 2011,
        "ipad": true,
        "link": "http://www.thehungrypets.com"
    }
]

Fazer o seu parsing é simples:

NSArray *projetosMobits = [NSJSONSerialization JSONObjectWithData:json options:0 error:&erro];  

NSDictionary *cineMobits = [projetosMobits objectAtIndex:0];
NSString *nome = [cineMobits objectForKey:@"nome"];
NSInteger *ano_lancamento = [[cineMobits objectForKey:@"ano_lancamento"] intValue];
BOOL *ipad = [[cineMobits objectForKey:@"ipad"] boolValue];

Se você tiver o JSON como um Stream:

NSArray *projetosMobits = [NSJSONSerialization JSONObjectWithStream:jsonStream options:0 error:&erro];

Em ambos os métodos acima, esse parâmetro options aceita uma bitmask com as opções:

  • NSJSONReadingMutableContainers: NSArrays e NSDictionaries são recuperados como mutable;
  • NSJSONReadingMutableLeaves: Valores NSString são recuperados como mutable;
  • NSJSONReadingAllowFragments: Permite que o json não seja apenas um dictionary ou array.

Essa última opção é importante caso o seu JSON possa ser apenas uma string, um número, um booleano, ou até um nulo. Ex:

null

Se NSJSONReadingAllowFragments não for fornecido, o parser reportará um erro e não fará o parsing corretamente.

Até a próxima!

Ao navegar neste site, você consente o uso de cookies nossos e de terceiros, que coletam informações anônimas e são essenciais para melhorar sua experiência em nosso site.