Convertir au format JSON NSData à NSDictionary
Je suis en utilisant une API de service d'un service web et il est écrit dans la description qu'ils envoient des données JSON qui correspond aussi à mon avis avec la réponse que je reçois de lui.
Voici une partie de ce que j'ai obtenu à partir de la NSURLConnection-Délégué (connexion didReceiveData: (NSData *) données) et converti en un NSString à l'aide de:
NSLog(@"response: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
Voici l'extrait:
{"scans":
{
"Engine1“:
{
"detected": false,
"version": "1.3.0.4959",
"result": null,
"update": "20140521"
},
"Engine2“:
{
"detected": false,
"version": "12.0.250.0",
"result": null,
"update": "20140521"
},
...
},
"Engine13":
{
"detected": false,
"version": "9.178.12155",
"result":
Dans le NSLog-Chaîne, il s'arrête là. Maintenant, je voudrais savoir de vous quoi de mal que je ne peux pas convertir ces données en JSON Dictionnaire avec cette ligne de code:
NSError* error;
NSMutableDictionary *dJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
J'expérimenter avec quelques options, mais toujours la même erreur:
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"
(Unexpected end of file while parsing object.) UserInfo=0x109260850 {NSDebugDescription=Unexpected end of file while parsing object.}
Tout indique que le JSON paquet est incomplet, mais je ne sais pas comment le vérifier ou comment faire pour trouver la question qui devrait être situé dans mon code.
Vous ne pouvez pas convertir à cause de son caractère incomplet. Êtes-vous essayer de le convertir en didReceiveData: ou dans connectionDidFinishLoading:? Si son didReceiveData alors il sera incomplète si HTTP a diviser et vous devez le convertir en connectionDidFinishLoading après avoir remonté.
Oui @MartinH vous avez raison et je l'ai fait comme Rajeev a écrit dans son de répondre aussi! Merci beaucoup!
+1 pour l'utilisation de l'erreur parm et l'affichage.
OriginalL'auteur user3191334 | 2014-05-21
Vous devez vous connecter pour publier un commentaire.
Avez-vous mis en place tout le délégué des méthodes de NSURLConnectionDelagate.On dirait que vous êtes en prenant les données pour la conversion de l' "- (void)connexion:(NSURLConnection *)connexion didReceiveData:(NSData *)les données" delagate méthode. Si oui, vous pouvez obtenir des données incomplètes et qui ne peuvent pas être convertis.
Essayez ceci:
Ici, lookServerResponseData est instance de NSMutableData déclaré à l'échelle mondiale.
Espère que ça va aider.
OriginalL'auteur Rajeev