Ключи в словаре от JSON - PullRequest
3 голосов
/ 30 августа 2011

Я импортирую словарь JSON. Мне нужно знать название клавиш для работы с ним.

Словарь загружает данные нормально:

   - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];    
  NSDictionary *results = [responseString JSONValue];
  NSLog(@"tenga: %@",results);

но когда я пытаюсь получить названия клавиш, приложение вылетает:

NSArray * keys = [results allKeys];
NSLog(@"keys: %@",keys); ...}

сообщение об ошибке:

[__ NSArrayM allKeys]: нераспознанный селектор отправлен на экземпляр 0x5a16b30 2011-08-30 22: 52: 26.171 Поиск в Твиттере [1906: 207] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [__ NSArrayM allKeys]: нераспознанный селектор отправлен в экземпляр 0x5a16b30'

Почему allKeys не работает?

Как получить имена для моих ключей, чтобы я мог начать работать с объектами?

редактировать

Я использую http://code.google.com/p/json-framework Stig Brautaset json framework

Ответы [ 3 ]

8 голосов
/ 30 августа 2011

URL-адрес, по которому вы получили эту строку JSON, дал вам массив, а не объект, т.е. он выглядел примерно так:

[ { "foo1" : "bar1" }, { "foo2" : "bar2" },... ]

Обратите внимание на скобки [ ].В этой ситуации ваш анализатор JSON дал вам NSArray в качестве объекта верхнего уровня (Objective-C).Вам нужна логика вроде:

id results = [responseString JSONValue];
if ([results isKindOfClass: [NSArray class]])
{
    // probably iterate through whtever is in it
}
else if ([results isKindOfClass: [NSDictionary class]])
{
    // dictionary at the top level.  Hooray!
}
else
{
    // something went horribly wrong, deal with it.
}
2 голосов
/ 30 августа 2011

То, что у вас есть, это не NSDictionary, а NSArray. NSArray не имеет селектора allKeys, вызывающего сбой. Если вы опубликуете дополнительную информацию об используемой вами JSON Framework, мы могли бы помочь лучше решить проблему

0 голосов
/ 30 августа 2011

В журнале написано, что этот вызов [responseString JSONValue] возвращает NSArray.

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