Получение значений Null при доступе к данным JSON из Objective C - PullRequest
0 голосов
/ 26 января 2012

У меня есть следующие данные JSON, пытающиеся проанализировать в Objective C - мой код возвращает нулевые значения для значений объекта нижнего уровня - userid, FirstName и LastName

Полный JSON:

{
  "members" :
    [
      {"member" : {"userid":"1","FirstName":"ramesh","LastName":"babu"}},
      {"member" : {"userid":"2","FirstName":"ramesh2","LastName":"babu2"}},
      {"member" : {"userid":"3","FirstName":"ramesh3","LastName":"babu3"}}
    ]
}

Мой код:

- (void)viewDidLoad
{
    [super viewDidLoad];

    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL];
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
    });
}

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                         options:kNilOptions 
                                                           error:&error];

    NSArray* members = [json objectForKey:@"members"]; //2


    NSString *text1 = [json description];
    jsonSummary.text = text1;

    NSEnumerator *e = [members objectEnumerator];
    NSArray *keys = [NSArray arrayWithObjects:@"userid", @"FirstName", @"LastName", nil];

    NSDictionary * member;
    while (member  = (NSDictionary *)[e nextObject]) {
        // do something with object
        // Iterate it
        text1 = [member description];
        NSLog(@"MEMBER ROW DATA%@", text1);
        for (id key in keys) {

            text1 = [member description];
            NSLog(@"key: %@   value:%@ ", key, [member objectForKey:key]);

        }

    }
}

Любая помощь будет оценена !!

1 Ответ

1 голос
/ 26 января 2012

Согласно образцу данных JSON, массив "members" содержит словари, каждый из которых имеет один ключ "member".Значение ключа "member" содержит словарь с данными членов более низкого уровня.

Ваш код предполагает, что словари со значениями более низкого уровня являются элементами массива, но это не так.

Сначала необходимо получить значение ключа "member", а затем получить значения нижнего уровня.

Изменение этой строки:

NSLog(@"key: %@   value:%@ ", key, [member objectForKey:key]);

на:

NSLog(@"key: %@   value:%@ ", key, 
    [[member objectForKey:@"member"] objectForKey:key]);

должен сделать это, хотя я бы немного изменил имена переменных, чтобы сделать его менее запутанным.

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