2012-01-26 3 views
0

lorsque je tente d'analyser la réponse JSON, j'ai obtenu une réponse vide et cette erreur:Mon application n'analyse de la réponse JSON

JSONValue failed. Error trace is: (
    "Error Domain=org.brautaset.JSON.ErrorDomain Code=11 \"Unexpected end of string\" UserInfo=0x797c420 {NSLocalizedDescription=Unexpected end of string}" 
) 

Voici comment j'essaye d'envoyer la demande JSON et comment je l'ai essayé pour analyser sa réponse:

envoyer la demande JSON:

- (void)viewWillAppear:(BOOL)animated{ 
    //Specify the adress of the webservice (url) 
    NSURL *url = [NSURL URLWithString:@"http://xxxxxxxxxxx.com/webservices/"]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    NSString *jsonStringArray=[aMutableArray JSONRepresentation]; 

    NSLog(@"-------------"); 
    NSLog(@"%@",jsonStringArray); 
    NSLog(@"-------------"); 
    [request setPostValue:jsonStringArray forKey:@"liste_des_themes"]; 
    NSLog(@"The response string is: %@",request.responseString); 
    [request setDelegate:self]; 
    [request startAsynchronous]; 
} 

pour le NSLog où j'ai essayé d'afficher la chaîne JSON avant de l'envoyer, je suis un format JSON correct:

NSLog(@"%@",jsonStringArray);//["Mairie","Préfectures et sous-préfectures"] 

Maintenant, pour la deuxième NSLog, je me suis nulle:

NSLog(@"The response string is: %@",request.responseString);//The response string is: (null) 

Lors de l'analyse de la réponse:

-(void)requestFinished:(ASIHTTPRequest *)request 
    { 
     if(request.responseStatusCode==200) 
     { 
     NSLog(@"This block gets called, response code is 200");//This block gets called, response code is 200 
     //parse the response 
      NSLog(@"The response string is: %@",request.responseString); 

      NSString *responseString=[request responseString]; 
      NSDictionary *responseDict=[responseString JSONValue]; 
    } 
} 

Pour le NSLog essayant d'afficher la chaîne de réponse, je suis rien, ni null, ni une valeur correcte:

  NSLog(@"The response string is: %@",request.responseString); 
    //The response string is: 

Et après cela, je suis arrivé cette erreur de trace:

JSONValue failed. Error trace is: (
     "Error Domain=org.brautaset.JSON.ErrorDomain Code=11 \"Unexpected end of string\" UserInfo=0x797c420 {NSLocalizedDescription=Unexpected end of string}" 
    ) 

Pouvez-vous me aider? merci à l'avance.

+1

Pour moi ça ressemble à un problème côté serveur – vikingosegundo

Répondre

2

Je suppose que vous n'avez aucun contrôle sur le service Web, donc vous dire de faire quelque chose à ce sujet est généralement un non-starter.

1) Assurez-vous d'abord que la réponse JSON est correcte. Pouvez-vous le télécharger dans un navigateur et voir que cela semble correct?

2) Si cela semble correct, peut-il passer un test de charpie JSON? (Essayez jsonlint.com et branchez-le ici.)

3) S'il passe (1) et (2), vérifiez s'il contient des valeurs null nulles dans la réponse de données renvoyée. J'ai trouvé que c'était le cas dans mon propre code. Je ne pourrais pas travailler directement avec ceci sans enlever d'abord les nulls principaux.

Malheureusement, je ne suis pas à mon mac pour copier le code que j'utilise pour résoudre ce problème. Mais c'était un vrai problème, et la solution est d'enlever les nulls (Il y en avait des milliers dans mon cas.) Les Nulls dans une piqûre ressemblent à la terminaison de la chaîne, donc les nulls en tête cachent le vrai contenu.

+0

Bonjour Jim, j'ai tout le contrôle du côté webservice, c'est le mien, la réponse JSON est ok, je l'ai déjà testé sur le 'jsonlint.com', cependant, c'est toujours l'étape 3 dans votre réponse, je ne comprends pas exactement ce que vous entendez par un null nul, voici ma réponse: «{« themes »: [[" Direction des Routes Secteur de Pithiviers "," mairies ", "Morailles 45300 PITHIVIERS LE VIEIL", "0238345744", "48.823042", "2.365907"], ["Cru00e9dit Mutuel Du Centre", "banques", "agence de Pithiviers 33 r Am Gourdon 45300 PITHIVIERS", "0820834080" , "48.703042", "2.145907"]]} ' – Malloc

+0

Pour une raison quelconque, le serveur que j'utilisais préférait des octets de début avec la valeur 0x00. Il y en avait beaucoup. Je n'avais aucun contrôle sur ce qui était envoyé. Il a semblé parfait dans un navigateur, ainsi je suppose que le navigateur a enlevé ces nulls dehors.Mais quand j'ai examiné les données brutes que mon programme a reçues, les zéros étaient évidents, et interprétés comme des terminaisons nulles d'une chaîne. Examinez les données brutes reçues par votre connexion d'URL dans votre code. – Jim

+0

Ainsi, les zéros de la chaîne de réponse peuvent être à l'origine du problème? – Malloc

1

Vous rencontrez un problème avec le service Web qui dessert le JSON. Déboguez cela et vous trouverez le problème.