Не удается получить доступ к содержимому NSArray на JSON Framework для iPhone - PullRequest
1 голос
/ 18 ноября 2011

Я могу успешно проанализировать содержимое файла JSON, используя JSON-Framework 3.0, но я не могу извлечь все элементы NSArray.

Приложение вылетает в этой строке (показано ниже) link = [myJsonArray objectAtIndex:0]; , сообщая мне на консоли: -[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x70ea20.

Вот мой код:

NSError *error;
NSString *link;
NSArray *myJsonArray;

NSString *jsonString = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"myJSONfile" ofType:@"json"] encoding:NSUTF8StringEncoding error:&error];

SBJsonParser *parser = [[SBJsonParser alloc] init];
myJsonArray = [[parser objectWithString:jsonString error:&error] copy];
[parser release];

link = [myJsonArray objectAtIndex:0]; 

NSLog(@"json returns: %@", myJsonArray);

А вот мой файл JSON:

{
   "Programs": [
      {"link1": "http://www.myWebSite1.aspx",
       "program name": "Live Show at 9",
       "speaker": "Dr. Speaker 1"},
      {"link2": "http://www.myWebSite2.aspx",
       "name": "Dr. Speaker 2",
       "speaker": "Live Show at 10"}
   ]
}

Это вывод журнала:

 JSON Output: {

  Programs =     (
      {
       link1: "http://www.myWebSite1.aspx",
       program name: "Live Show at 9",
       speaker: "Dr. Speaker 1"},

     {link2: "http://www.myWebSite2.aspx",
      program name: "Dr. Speaker 2",
      speaker: "Live Show at 10"}
 );
}

Что я делаю не так? Спасибо за вашу помощь!

Ответы [ 6 ]

2 голосов
/ 18 ноября 2011

Ваш объект - словарь.Массив может быть возвращен путем доступа к

NSArray *aLinkArray = [myJasonArray valueForKey:@"Programs"]
1 голос
/ 18 ноября 2011

Для доступа к значению link1 вы должны использовать:

[[[myJsonArray objectForKey:@"Programs"] objectAtIndex:0] objectForKey:@"link1"]
1 голос
/ 18 ноября 2011

Анализатор возвращает NSDictionary, а не NSArray в вашем случае.

Добавьте

NSLog(@"json returns: %@", myJsonArray);

перед доступом к этому объекту и просмотрите результаты в консоли.

1 голос
/ 18 ноября 2011

Убедитесь, что текст в вашем файле JSON начинается с [ и заканчивается ]. В этом случае objectWithString: должен вернуть массив.

Сейчас, похоже, возвращается NSDictionary, что было бы в случае, если ваш файл начинается с { и заканчивается }.

1 голос
/ 18 ноября 2011

Вы отправляете objectAtIndex: в NSDictionary, что неправильно. Просто попробуйте напечатать то, что вы присваиваете myJsonArray, и посмотрите, является ли он допустимым массивом.

0 голосов
/ 18 ноября 2011

Скорее всего, у вас неверный JSON. Попробуйте вставить свой текст JSON в http://jsonlint.com/ и посмотреть, является ли он действительным.

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