Tentativa de análise SBJson - objetivo C
-
12-12-2019 - |
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?
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.)