iPhone не может проанализировать результаты JSON с YELP

Я пытаюсь проанализировать проверенный JSON из результатов поиска yelp.

Это правильно выплевывает JSON, как и ожидалось (подтверждено в браузере симулятора и мой собственный).

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSString *dump = [[[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding] autorelease];

    NSLog(@"Did Recieve data: %@",  dump);
    [JSONData appendData:data];
}

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

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{   
    NSLog(@"Connection Did Finish Loading");

    NSError *error = nil;
    id cureLocations = [[CJSONDeserializer deserializer] deserializeAsDictionary:JSONData error:&error];
    [JSONData release];

    NSLog(@"Connection finished loading: %@", error);
}

Я получаю: Соединение завершено загрузка: Ошибка домена =CJSONDeserializerErrorDomain Code=-11 "Операция не может быть завершена. (CJSONDeserializerErrorDomain ошибка -11.)"

Я переключился на TouchJSON из SBJSON, потому что я не смог извлечь его из этого фреймворка. Я попытался загрузить его в словари и массивы с нулевым результатом. В этот момент я часами бился головой о клавиатуру и был бы очень признателен за любой ввод.

Образец JSON

Обновить:

Я дурачок Я не инициализировал JSONData. Пожалуйста, примите мои извинения за потраченное время и спасибо за ваши предложения.

2 ответа

Решение

Тьфу, после дальнейшего просмотра приложения кажется, что я бросился копировать свои образцы в этот проект и забыл инициализировать JSONData:

self.JSONData = [[[NSMutableData alloc] init]autorelease];

Затем я обновил свой метод didReceiveData:

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [[self JSONData] appendData:data];
}

И все теперь работает как положено. Это второй раз, когда я столкнулся с этой ошибкой. Наверное, я всегда ожидал, что отладчик поднимет его. Спасибо за все время и помощь.

SBJSON - довольно приличный и известный парсер. Если он не проанализировал ваш ввод, вы, вероятно, предположите, что это потому, что ввод был действительно плохим. Если TouchJSON его тоже не анализирует, ввод определенно плохой. Так что с тобой что-то происходит JSONData объект, который хитро

Я бы предложил вам распечатать ваши данные JSON на консоли в вашем connectionDidFinishLoading метод и попробуйте повторно проверить его. Посмотрите, что на самом деле находится в объекте данных, который вы передаете в CJSON.

Другие вопросы по тегам