Pergunta

Estou tentando analisar o seguinte JSon (que foi validado, acho que da última vez que verifiquei):

{
    "top_level" =     (
                {
            "download" = "http:/target.com/some.zip";
            "other_information" = "other info";
            "notes" =             (
                                {
                    obj1 = "some text";
                    obj2 = "more notes";
                    obj3 = "some more text still";
                }
            );
            title = "name_of_object1";
        },
                {
            "download" = "http:/target.com/some.zip";
            "other_information" = "other info";
            "notes" =             (
                                {
                    obj1 = "some text";
                    obj2 = "more notes";
                    obj3 = "some more text still";
                }
            );
            title = "name_of_object2";
        },
                {
            "download" = "http:/target.com/some.zip";
            "other_information" = "other info";
            "notes" =             (
                                {
                    obj1 = "some text";
                    obj2 = "more notes";
                    obj3 = "some more text still";
                }
            );
            title = "name_of_object3";
        }
    );
}

Minha tentativa está usando o seguinte:

NSDictionary *myParsedJson = [myRawJson JSONValue];

for(id key in myParsedJson) {
    NSString *value = [myParsedJson objectForKey:key];
    NSLog(value);
}

Erro:

-[__NSArrayM length]: unrecognized selector sent to instance 0x6bb7b40

Pergunta:Parece-me que o valor JSon torna o objeto myParsedJson um NSArray em vez de um NSDictionary.

Como eu iria percorrer os objetos chamados name_of_object e acessar cada um dos dicionários aninhados?Estou fazendo isso da maneira certa?

Foi útil?

Solução

O primeiro argumento do NSLog deve ser uma string.Experimente isto:

NSLog(@"%@", value);

Outras dicas

Seu value não é uma string, só porque você digitou assim.Com base na estrutura que você postou, você terá uma matriz como sua objeto de nível superior.

NSDictionary *myParsedJson = [myRawJson JSONValue];
for(id key in myParsedJson) {
    id value = [myParsedJson objectForKey:key];
    NSLog(@"%@", value);
}

O %@ sintaxe no NSLog faz com que o -description método a ser valor invocado;este método retorna um NSString.Ou seja, que você poderia fazer NSLog([value description]); mas isso é geralmente não é uma boa ideia.(Alguém pode criar entradas maliciosas que podem travar seu aplicativo.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top