Проблемы с чтением объекта JSON с помощью Obj-C - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь прочитать следующий объект json, используя json-framework и obj-C

{
Sections =     {
    Now = "Wednesday 9 February 2011 02:40";
    Section =         (
                    {
            Article =                 (
                                    {
                    Exceprt = "text here";
                    ID = 49011;
                    Title = "text here";
                    Type = Politics;
                    audioCounter = 0;
                    commentsCounter = 0;
                    hasMore = false;
                    important = False;
                    likesCounter = 0;
                    photoCounter = 0;
                    time = "21:12";
                    timeStamp = "2/8/2011 9:14:16 PM";
                    timeStatus = True;
                    videoCounter = 0;
                    viewsCounter = 0;
                },
                                    {
                    Exceprt = "text here";
                    ID = 49010;
                    Title = "text here";
                    Type = Politics;
                    audioCounter = 0;
                    commentsCounter = 0;
                    hasMore = false;
                    important = True;
                    likesCounter = 0;
                    photoCounter = 0;
                    time = "20:45";
                    timeStamp = "2/8/2011 9:10:59 PM";
                    timeStatus = True;
                    videoCounter = 0;
                    viewsCounter = 0;
                },
                                    {
                    Exceprt = "text here";
                    ID = 49008;
                    Title = "text here";
                    Type = Politics;
                    audioCounter = 0;
                    commentsCounter = 0;
                    hasMore = false;
                    important = False;
                    likesCounter = 0;
                    photoCounter = 0;
                    time = "20:28";
                    timeStamp = "2/8/2011 9:09:44 PM";
                    timeStatus = True;
                    videoCounter = 0;
                    viewsCounter = 0;
                }
            );
            ID = 22;
            Name = "EN Live";
            totalNews = 3416;
        }
    );
};
}

Я намереваюсь получить список статей (список словарей), чтобы я мог позжедоступ к ним легко.Я застрял на этом некоторое время, и мой код выдаёт мне ошибку при вызове несуществующего метода для NSArray, что привело меня к подозрению, что я неправильно понимаю объект json.Я абсолютно новичок в этом, и любая помощь очень ценится.

Вот мой код:

    NSDictionary *results = [jsonString JSONValue];
NSDictionary *Articles = [[results objectForKey:@"Sections"]    objectForKey:@"Section"];
NSArray *ListOfArticles = [Articles objectForKey:@"Article"];

for (NSDictionary *article in ListOfArticles)
{

    NSString *title = [article objectForKey:@"Title"];
    NSLog(title);
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Прежде всего, это недопустимые данные JSON. Имена (в парах имя / значение) являются строками и должны быть заключены в кавычки. Строковые значения всегда должны быть в кавычках. Логические значения должны быть либо true, либо false (нижний регистр). Проверьте http://json.org/ и http://www.ietf.org/rfc/rfc4627.txt?number=4627 и http://jsonlint.com

Вот структура ваших данных:

  1. Значением верхнего уровня является объект (словарь)
  2. Этот объект имеет имя (ключ) с именем Sections, значением которого является сам другой объект (словарь)
  3. Sections имеет имя (ключ) с именем Section, значением которого является массив
  4. Каждый элемент в массиве Section является объектом (словарем)
  5. Каждый элемент в массиве Section имеет имя (ключ) с именем Article, значением которого является массив, а также другие имена (ключи): ID, title, totalNews
  6. Каждый элемент в массиве Article является объектом

Если ваши данные JSON были действительны, вы можете проанализировать их следующим образом:

// 1.
NSDictionary *results = [jsonString JSONValue];
// 2.
NSDictionary *sections = [results objectForKey:@"Sections"];
// 3.
NSArray *sectionsArray = [sections objectForKey:@"Section"];
// 4.
for (NSDictionary *section in sectionsArray) {
    // 5.
    NSLog(@"Section ID = %@", [section objectForKey:@"ID"];
    NSLog(@"Section Title = %@", [section objectForKey:@"Title"];
    NSArray *articles = [section objectForKey:@"Article"];
    // 6.
    for (NSDictionary *article in articles) {
        NSLog(@"Article ID = %@", [article objectForKey:@"ID"];
        NSLog(@"Article Title = %@", [article objectForKey:@"Title"];
       // …
    }
}
0 голосов
/ 09 февраля 2011

Ваша структура JSON, вероятно, анализирует NSDictionary, где вы ожидаете NSArray. Это позволит вам назначить NSDictionary NSArray, но затем вы получите исключение времени выполнения при попытке вызвать метод в вашем «массиве». Судя по JSON, который вы опубликовали (что не является правильным JSON), это то, как я бы выглядел в своем коде для разбора. Имена NSDictionaries и NSArrays просто названы в честь атрибутов JSON, которые они представляют.

NSDictionary* results = [jsonString JSONValue];
NSDictionary* sections = [results valueForKey:@"Sections"];
NSArray* section = [sections valueForKey:@"Section"];
NSArray article = [[section objectAtIndex:0] valueForKey:@"Article"];

for (NSDictionary* anArticle in article) {
    NSLog(@"%@", [anArticle valueForKey:@"Title"]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...