Вопрос

Я пытаюсь проанализировать следующий 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]); Но это, как правило, не очень хорошая идея.(Кто-то может создать вредоносный ввод, который может привести к сбою вашего приложения.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top