Попытка анализа SBJson — цель C
-
12-12-2019 - |
Вопрос
Я пытаюсь проанализировать следующий JSon (который, кажется, был проверен в прошлый раз, когда я проверял):
{
"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";
}
);
}
Моя попытка использует следующее:
NSDictionary *myParsedJson = [myRawJson JSONValue];
for(id key in myParsedJson) {
NSString *value = [myParsedJson objectForKey:key];
NSLog(value);
}
Ошибка:
-[__NSArrayM length]: unrecognized selector sent to instance 0x6bb7b40
Вопрос:Мне кажется, что значение JSon делает объект myParsedJson NSArray вместо NSDictionary.
Как мне перебирать объекты с именем name_of_object и получать доступ к каждому из вложенных словарей?Правильно ли я поступаю?
Решение
Первый аргумент NSLog должен быть строкой.Попробуйте это:
NSLog(@"%@", value);
. Другие советы
Твой value
не является строкой только потому, что вы так напечатали.Исходя из разместимости, которую вы разместили, у вас будет массив в качестве объекта верхнего уровня.
NSDictionary *myParsedJson = [myRawJson JSONValue];
for(id key in myParsedJson) {
id value = [myParsedJson objectForKey:key];
NSLog(@"%@", value);
}
А %@
синтаксис в NSLog вызывает -description
метод, который должен быть вызван по значению;этот метод возвращает NSString.Это означает, что вы мог делать NSLog([value description]);
Но это, как правило, не очень хорошая идея.(Кто-то может создать вредоносный ввод, который может привести к сбою вашего приложения.)