iPhone не может проанализировать результаты JSON с YELP - PullRequest
1 голос
/ 08 марта 2011

Я пытаюсь проанализировать проверенный 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);
}

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

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

образец JSON

Обновление:

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

Ответы [ 2 ]

1 голос
/ 08 марта 2011

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

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

0 голосов
/ 23 марта 2011

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

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

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

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

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

...