2012-03-14 4 views
0

Я разбираю JSON, возвращенный графическим запросом Facebooks. Я создаю NSMutableArray с именем json для хранения результатов запроса, который возвращает информацию в формате JSON. Затем я пытаюсь добавить информацию, анализированную в таблицу. Для этого я создаю NSDictionary с помощью:Parsing JSON error

NSDictionary *dict = [self.json objectAtIndex:0]; 

Однако я получаю ошибку

-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x6b2e1c0 

Я создаю self.json в заголовочном файле как NSMutableArray синтезирует его, и инициализировать его следующим образом :

NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/40796308305/albums"]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
NSError *err; 
self.json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&err]; 

Я также попытался заливке данные, возвращенные из NSJSONSerialization к NSMutableArray, что не помогло.

+0

Используйте json framework для анализа массива json. https://github.com/stig/json-framework. – Neo

+0

Он отлично разбирается - библиотека json не проблема :) – deanWombourne

ответ

1

Ну с сообщением об ошибке, то вполне очевидно, что self.json делает фактически не провести NSMutableArray но и NSDictionary, который, конечно, не к -objectAtIndex Отвечает:

Он содержащий словарь, вероятно, из-за службы возвращает объект JSON. Взгляните на ответ (NSLog(@"%@", self.json) сразу после self.json = ...) и соответствующим образом настройте свой код.

1

Facebook возвращает словарь, а не массив.

Обратите внимание, что возвращаемые данные начинаются с '{', а не '['.

0

Надеюсь, что у вас уже есть ответ еще для вашей справки. Словарь выглядит просто как структура JSON. Пример Объект JSON: { "key1" : "value1" , "key2" : "value2" ,"key3" : "value3" , "key4" : "value4" } (только для справки read here, чтобы узнать больше о JSON), и в словаре Dictionary явно содержатся пары key:value.

-1
-(void) jsonRESTWebServiceMethod:(NSString*)method WithParameter:(NSMutableDictionary*)params{ 
    self.iResponseType = JSONTYPE; 
    NSMutableDictionary *bodyDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:method,@"name",params,@"body",nil,nil]; 
    NSData *data = [[CJSONSerializer serializer] serializeObject:bodyDict error:nil]; 
    NSString *strRequest = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 
    strRequest = [NSString stringWithFormat:@"json=%@",strRequest]; 
    NSData *body = [strRequest dataUsingEncoding:NSUTF8StringEncoding]; 
    NSString *strURL = [NSString stringWithString:WebServiceURL]; 
    NSString* escapedUrlString = [strURL stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 

    NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:[NSURL URLWithString:escapedUrlString]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:body]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d",strRequest.length]; 
    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField: @"Content-Type"]; 
    [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 

    if (mydata) { 
     [mydata release]; 
     mydata = nil; 
    } 
    conections = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    mydata = [[NSMutableData alloc] init]; 
} 

-(void)connectionFinish:(WebService*)webservice response:(NSData*)data{ 
     NSMutableDictionary *dctResponse = [[CJSONDeserializer deserializer] deserialize:data error:nil]; 
} 
+0

Это действительно не подходящий ответ. Вы не должны писать код для OP, но говорите ему, что он сделал не так, и как он может это исправить, возможно, используя некоторые примеры кода. Кроме того, ваш код использует библиотеки, которые вы не упоминаете, а также код содержит очень много вещей, которые совсем не связаны с вопросом/проблемой. – Ahti