Как разобрать JSON в цель C - SBJSON - PullRequest
8 голосов
/ 07 февраля 2011

Не могли бы вы сказать, как передать строку JSON, которая выглядит следующим образом:

{"lessons":[{"id":"38","fach":"D","stunde":"t1s1","user_id":"1965","timestamp":"0000-00-00 00:00:00"},{"id":"39","fach":"M","stunde":"t1s2","user_id":"1965","timestamp":"0000-00-00 00:00:00"}]}

Я пробовал это так:

SBJSON *parser =[[SBJSON alloc] init];
    NSArray *list = [[parser objectWithString:JsonData error:nil] copy];
    [parser release];
    for (NSDictionary *stunden in list)
    {
        NSString *content = [[stunden objectForKey:@"lessons"] objectForKey:@"stunde"];

    }

заранее спасибо

С наилучшими пожеланиями

1 Ответ

22 голосов
/ 07 февраля 2011

Обратите внимание, что ваши данные JSON имеют следующую структуру:

  1. значение верхнего уровня - это объект (словарь), который имеет единственный атрибут, называемый «уроки»
  2. атрибут «уроков» является массивом
  3. каждый элемент в массиве «уроков» представляет собой объект (словарь, содержащий урок) с несколькими атрибутами, включая «stunde»

Соответствующий код:

SBJSON *parser = [[[SBJSON alloc] init] autorelease];
// 1. get the top level value as a dictionary
NSDictionary *jsonObject = [parser objectWithString:JsonData error:NULL];
// 2. get the lessons object as an array
NSArray *list = [jsonObject objectForKey:@"lessons"];
// 3. iterate the array; each element is a dictionary...
for (NSDictionary *lesson in list)
{
    // 3 ...that contains a string for the key "stunde"
    NSString *content = [lesson objectForKey:@"stunde"];

}

Пара наблюдений:

  • В -objectWithString:error: параметр error является указателем на указатель. В этом случае более распространенным является использование NULL вместо nil. Также неплохо было бы не передавать NULL и использовать объект NSError для проверки ошибки в случае, если метод возвращает nil

  • Если jsonObject используется только в этом конкретном методе, вам, вероятно, не нужно его копировать. Код выше не.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...