2010-11-22 5 views
0

reçois ci-dessous erreur lors de la conversion en réponse JSON NSDictionary dans l'analyse syntaxique JSON ...erreur dans l'analyse JSON en réponse convertissant en NSDictionary

ERREUR: -JSONValue a échoué. trace d'erreur est: ( erreur Domaine = org.brautaset.JSON.ErrorDomain Code = 3 UserInfo = 0x4d38270 "personnage principal non reconnu" )

toute suggestion ...

+1

Nous aurions besoin de voir les données que vous essayez de décoder – grahamparks

+1

Si vous êtes celui qui crée l'objet JSON que votre application analyse ensuite, vérifiez si vous créez correctement l'objet JSON. Aussi, comme le dit Graham, collez les données – Bourne

+0

+100000 pour l'enregistrement des données. – JeremyP

Répondre

0

en fait je ne suis pas créer l'objet JSON par en utilisant api suis la récupération ..

maintenant j'ai trouvé la raison de cette erreur. Je ne donne pas d'objet json valide pour être converti en nsdictionary ... Donc, pour obtenir un objet json valide, nous devons produire une URL valide pour récupérer l'objet json.

Merci pour votre suggestion ...

1

vous avez probablement le même problème que moi ... Les données de retour est au format JSONP au lieu de JSON pur. En d'autres termes, vous aurez affaire à quelque chose comme

functionCall({"Name": "Foo", "Id" : 1234, "Rank": 7}); 

au lieu de simplement

{"Name": "Foo", "Id" : 1234, "Rank": 7} 

Plus d'info here

Vous aurez besoin de dépouiller la fonction et les parenthèses de la chaîne avant de l'analyser à travers le cadre JSON. Vous pouvez le faire avec les éléments suivants Expression régulière (espacées pour le rendre plus facile à voir):

\w+ \s? \((\{ .* \}) \} 

Et le script d'écrire c'est:

NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@"\\w+\\s?\\((\\{.*\\})\\)" 
         options:NSRegularExpressionCaseInsensitive 
          error:&error]; 

[regex replaceMatchesInString:resultString 
         options:0 
         range:NSMakeRange(0, [resultString length]) 
       withTemplate:@"$1"]; 

NSLog(@"resultString = %@", resultString); 
NSLog(@"converted = %@", [resultString JSONValue]); 

resultString est la réponse de l'url request ... Il doit être stocké en tant que NSMutableString pour que l'expression régulière le mette à jour.