objective c parse json de la requête url

J'essaye d'parsingr une string de JSON demandée à partir d'un api situé à: http://www.physics.leidenuniv.nl/json/news.php

Cependant, j'ai du mal à parsingr ce json. Je reçois l'erreur suivante: Unexpected end of file during ssortingng parse

J'ai cherché des heures, mais je ne trouve pas de réponse à ce problème.

Mon extrait de code:

Dans mon avisDidLoad:

 NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithSsortingng:@"http://www.physics.leidenuniv.nl/json/news.php"]]; [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Le délégué:

 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSMutableData *responseData = [[NSMutableData alloc] init]; [responseData appendData:data]; NSSsortingng *responseSsortingng = [[NSSsortingng alloc] initWithData:responseData encoding:NSUTF8SsortingngEncoding]; NSError *e = nil; NSData *jsonData = [responseSsortingng dataUsingEncoding:NSUTF8SsortingngEncoding]; NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:jsonData options: NSJSONReadingMutableContainers error: &e]; } 

Quelqu'un sait-il une réponse à ce problème afin que je puisse parsingr datatables de JSON?

Faites de cette façon:

 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // Append the new data to receivedData. // receivedData is an instance variable declared elsewhere. [responseData appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSSsortingng *responseSsortingng = [[NSSsortingng alloc] initWithData:responseData encoding:NSUTF8SsortingngEncoding]; NSError *e = nil; NSData *jsonData = [responseSsortingng dataUsingEncoding:NSUTF8SsortingngEncoding]; NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:jsonData options: NSJSONReadingMutableContainers error: &e]; } 

Je reorderais de le faire de cette façon:

 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithSsortingng:@"http://www.physics.leidenuniv.nl/json/news.php"]]; __block NSDictionary *json; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSLog(@"Async JSON: %@", json); }]; 

Ou si pour une raison quelconque (non recommandé) vous voulez exécuter une requête synchrone, vous pouvez faire:

 NSData *theData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSDictionary *newJSON = [NSJSONSerialization JSONObjectWithData:theData options:0 error:nil]; NSLog(@"Sync JSON: %@", newJSON); 
 //call this method -(void)syncWebByGETMethod { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; NSSsortingng *urlSsortingng = [NSSsortingng ssortingngWithFormat:@"http://www.yoursite.com"]; NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithSsortingng:urlSsortingng]]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * response, NSData * data, NSError * connectionError) { if (data) { id myJSON; @try { myJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; } @catch (NSException *exception) { } @finally { } jsonArray = (NSArray *)myJSON; NSLog(@"mmm %@",jsonArray); } }]; } 

Une solution consiste à utiliser NSURLConnection sendSynchronousRequest:returningResponse:error: ( docs ). Dans le gestionnaire d'achèvement, vous aurez TOUTES datatables de réponse, pas seulement datatables partielles que vous obtenez dans la connection:didReceiveData: du délégué connection:didReceiveData: méthode.

Si vous souhaitez continuer à utiliser le délégué, vous devez suivre les conseils des documents Apple :

Le délégué doit concaténer le contenu de chaque object de données fourni pour créer datatables complètes pour un chargement d'URL.

Objectif de l'API Volunteermatch C

J'utilise une méthode commune pour AFNetworking WS Calling. Les usages:

Appelez WS:

 NSDictionary* param = @{ @"action":@"helloWorld", @"query":@"{\"name\":\"john\"}" }; [self requestWithUrlSsortingng:@"URL" parmeters:paramDictionary success:^(NSDictionary *response) { //code For Success } failure:^(NSError *error) { // code for WS Responce failure }]; 

Ajouter deux methods: ces deux methods sont courantes, vous pouvez utiliser cette méthode commune dans tout projet utilisant la class NSObject. ajoutez également // définissez le code d'erreur comme …

define kDefaultErrorCode 12345

 - (void)requestWithUrlSsortingng:(NSSsortingng *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *error))failure { [self requestWithUrl:stUrl parmeters:parameters success:^(NSDictionary *response) { if([[response objectForKey:@"success"] boolValue]) { if(success) { success(response); } } else { NSError *error = [NSError errorWithDomain:@"Error" code:kDefaultErrorCode userInfo:@{NSLocalizedDescriptionKey:[response objectForKey:@"message"]}]; if(failure) { failure(error); } } } failure:^(NSError *error) { if(failure) { failure(error); } }];} 

et // Définir les en-têtes dans la méthode ci-dessous (si nécessaire, supprimer)

 - (void)requestWithUrl:(NSSsortingng *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *))failure { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; [manager.requestSerializer setValue:@"WWSE profile=\"UsernameToken\"" forHTTPHeaderField:@"Authorization"]; [manager GET:stUrl parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { if([responseObject isKindOfClass:[NSDictionary class]]) { if(success) { success(responseObject); } } else { NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; if(success) { success(response); } } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); if(failure) { failure(error); } }];} 

Pour tous les problèmes et plus de détails s'il vous plaît visitez..AFNetworking

 -(void)getWebServic{ NSURL *url = [NSURL URLWithSsortingng:@"----URL----"]; // 2 NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSDictionary *jsonObject=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; [self loadDataFromDictionary:(NSArray*)jsonObject]; NSLog(@"data: %@",jsonObject); }]; // 3 [downloadTask resume]; }