2012-05-19 2 views
4

Je veux analyser la sortie JSON résultant de l'URL suivante dans le cadre SBJSON pour iOS http://maps.google.com/maps?q=school&mrt=yp&sll=13.006389,80.2575&output=jsonComment analyser un JSON sans guillemets avec sa chaîne KEY?

while(1);{title:"school - Google Maps",url:"/maps?q=school\x26mrt=yp\x26sll=13.006389,80.2575\x26ie=UTF8\x26hq=school\x26hnear=",urlViewport:false,ei:"RCu3T4eeMqSiiAe7k-yZDQ",form:{selected:"q",q:{q:"school",mrt:"yp",what:"school",near:""},d:{saddr:"",daddr:"",dfaddr:""},geocode:""}, 

J'utilise http://www.bodurov.com/JsonFormatter/ de le lire en ligne.

Dans la méthode de réponse ASIHttpRequest, j'ai supprimé while (1); de la réponse

NSString *responseString = [[request resonseString]substringFromIndex:9]; //to remove while(1) 
SBJSONParser * parser = [[SBJSONParser alloc]init]; 
NSDictionary *jsonDict = (NSDictionary*)[parser objectFromString:responseString]; 
NSLog(@"%@",jsonDict) // prints null 
// [responseString JSONValue] also reports error 

je suppose que la clé JSON sans guillemets doubles est à l'origine de problème.

Au lieu de { "title": "hôpital - Google Maps", "urlViewport": false, }, nous obtenons { titre: "hôpital - Google Maps", "urlViewport" : false }

Aidez-moi à analyser cette structure JSON complexe renvoyée par Google.

+0

Quel est le problème? –

+0

Je veux analyser une représentation JSON qui n'a pas de guillemets doubles dans sa clé. –

+0

Wow, c'est cassé! **CASSÉ**!! La réponse commence par 'while (1);', c'est JSON invalide juste là. Je ne m'attends à aucun parser JSON pour pouvoir gérer cela. Voir [Spécification JSON] (http://www.json.org/), pour savoir comment JSON doit être formaté. –

Répondre

0

Vous devez ajouter les guillemets manquants aux clés, alors essayez ceci:

responseString = [responseString stringByReplacingOccurrencesOfString:@"(\\w+)\\s*:" 
           withString:@"\"$1\":" 
           options:NSRegularExpressionSearch 
           range:NSMakeRange(0, [responseString length])]; 

Cela devrait bien fonctionner avec la chaîne JSON donnée.

+0

Ci-dessus donné JSON est juste un extrait de deux lignes du [lien] (http://maps.google.com/maps?q=school&mrt=yp&sll=13.006389,80.2575&output=json). J'ai également essayé cette solution [link] (http://www.dimzzy.com/blog/2011/09/fixing-invalid-json-before-parsing/). Mais pas d'espoir, mieux je peux aller avec la sortie kml. Merci de votre intérêt. –

+0

Je ne ferais pas confiance à cela pour fonctionner de manière fiable. –

1

Cela a fonctionné mieux pour mon cas car mes valeurs contenaient des temps qui provoquaient une correspondance incorrecte de l'expression régulière dans la réponse ci-dessus.

json = [json stringByReplacingOccurrencesOfString: @"(\\w*[A-Za-z]\\w*)\\s*:" 
             withString: @"\"$1\":" 
              options: NSRegularExpressionSearch 
              range: NSMakeRange(0, json.length)]; 
+1

Je ne ferais pas confiance au remplacement de caractères pour fonctionner de manière fiable. –

+0

En général, d'accord. Pour les cas spécifiques où vous connaissez le format des données (ou manipulez les erreurs d'une autre manière), cette règle est une solution beaucoup plus courte que de travailler par caractère pour reconnaître les clés mal formées. – greg

+0

Si je devais, pour un "vrai" environnement, je préfère prendre un analyseur JSON open-source et le modifier pour gérer cela. –

Questions connexes