2010-09-15 5 views
2

J'ai un service web cassé que je ne peux pas accéder et modifier. Il envoie du JSON principalement sympa, mais l'un des attributs est un objet JSON imbriqué qui est envoyé en tant que chaîne.Comment puis-je interpréter un objet JSON reçu comme une chaîne correctement?

http://www.ireland.com/api/getitemweb/185213
CustomJsonData dans la réponse de l'URL ci-dessus est l'exemple.

Ma question est comment pourrais-je interpréter la chaîne CustomJsonData comme un objet?

Je pensais que le 'mal' eval() pourrait le faire, mais pas de chance.

Merci, Denis

Répondre

6

Si vous utilisez eval, vous devez ajouter un (et) à la chaîne avant ev al:

var parsedObject = eval("(" + jsonString + ")"); 

Cependant, comme vous le dites, eval est le mal, en utilisant parseJSON de jquery est meilleure (et parens supplémentaires non requis):

var parsedObject = Jquery.parseJSON(jsonString); 

Documentation pour jQuery parseJSON: http://api.jquery.com/jQuery.parseJSON/

+0

Ceci est l'option pour moi maintenant car j'espère que le service sera réparé dans les prochains jours. Si ce n'est pas je vais le nettoyer et utiliser la suggestion de SimpleCoders comme jQuery n'est pas une option pour moi dans cette application non plus. Merci les gars. –

+0

Eval n'est pas mauvais, tout comme un exercice ne tue pas juste parce qu'il rime. Apprenez à utiliser JS, c'est un outil. –

+0

J'ai fait la même chose et puis je ai passé parsedObject comme source de jquery autocomplete, ai-je fait un tort sur ce point? –

0

Vous devez analyser les données deux fois - une fois pour analyser la chaîne JSON API entière et une fois pour analyser la chaîne JSON personnalisée.

function parseJSON(data) { 
    return JSON ? JSON.parse(data) : eval('(' + data + ')'); 
} 

var data = parseJSON(apiStr); 
var custom = parseJSON(data.CustomJsonData); 
+0

Notez qu'en raison d'un peu de conception douteuse, il est valide de mettre les caractères de fin de ligne Unicode obscurs U + 2028 et U + 2029 dans un littéral JSON, mais ils ' re n'est pas valide dans un littéral de chaîne JavaScript. Par conséquent, pour des raisons de sécurité, vous devriez remplacer "\ u2028" par "\\ u2028" et par "U + 2029", avant de les mettre entre crochets et "eval". – bobince

Questions connexes