2009-09-23 6 views
3

J'ai une chaîne JSON codée en dur.Parse JSON string

var test = "JSON STRING HERE"; 

J'utilise jQuery. Je sais qu'il existe une fonction comme getJSON, mais cela fait un appel AJAX. Je veux qu'il analyse la chaîne codée en dur afin que je puisse utiliser $.each(test, function(a,b){}))

Merci pour votre temps.

Répondre

11

Original Question:

jQuery fait un point de ne pas inclure un analyseur JSON accessible au public ou codeur. Ils veulent que vous utilisiez une bibliothèque tierce pour cela.

Je recommande celui hébergé à json.org:

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Sinon, vous pouvez utiliser le plugin jQuery-JSON hébergé sur Google Code:

http://code.google.com/p/jquery-json/


En réponse à "pourquoi jQuery ne met-il pas son analyseur à disposition?":

jQuery n'inclut pas réellement un analyseur d'aucune sorte. Dans la section AJAX du codebase de jQuery, vous pouvez voir ce qu'ils font sur lines 572-579.

La version rapide est qu'ils vérifient si vous avez inclus une bibliothèque JSON externe telle que celle de json.org, et si elle la trouve, ils l'utilisent pour analyser. Si vous n'en avez pas inclus, ils renvoient le json enveloppé dans une fonction, le renvoyant effectivement pour évaluation. Très difficile, mais très intelligent!

+1

+1 pour le plugin jQuery. Je l'aime quand il s'intègre à la bibliothèque - – Daff

+0

merci. une raison pour laquelle jQuery ne rend pas l'analyseur accessible au public? –

+0

@Alec, vous savez, c'est une excellente question. Je vais éditer ma réponse avec cette information. –

0

Malheureusement jQuery ne prend pas en charge l'analyse JSON en dehors des fonctions AJAX avec JSON ou JSONP comme type de données (désérialisation si étroitement liée au code AJAX et Callback). Vous pouvez bien sûr faire juste un

var obj = eval(test); 

Mais ce n'est certainement pas la voie Recommenéd (sauf quand vous savez-vous que votre chaîne est seulement un objet JavaScript et non le code source arbitraire à exécuter). Donc, le meilleur moyen est probablement d'utiliser une autre bibliothèque comme le JSON2 library (trouvé sur json.org).

1

Voici ce que jQuery fait dans une demande de paiement ajax lorsque le type de données est réglé sur « JSON » (qui est ce que getJSON fait, sous le capot):

window["eval"]("(" + data + ")"); 
+0

+1 pour indiquer ce que fait jQuery. Pas pour la méthode elle-même. Pouah. – eyelidlessness

+0

C'est ce à quoi il finira par revenir, même s'il ne va pas directement là-bas. Ils vérifient d'abord une bibliothèque d'analyse externe (un objet nommé JSON) d'abord, puis s'ils ne la trouvent pas, ils l'enveloppent dans un appel de fonction avant de l'envoyer à eval. –

5

-vous les gens réalisent que JSON signifie « JavaScript Notation d'objet "? Si vous avez JavaScript Object Notation codé en dur, il suffit de perdre les guillemets et vous avez terminé avec l'analyse car l'analyseur JavaScript s'occupera de cela.

var jsonstr = "{prop1: 'val1', prop2: 'val2'}"; 
var parsed = {prop1: 'val1', prop2: 'val2'}; 

Facile, n'est-ce pas? !! Il y a peut-être quelque chose que je ne connais pas, mais pour moi c'est assez difficile de comprendre les gens qui écrivent des parsers en JavaScript pour JavaScript ...Bien sûr, si vous n'êtes pas sûr de la sécurité de la source de votre jsonstr, alors l'évaluer directement n'est peut-être pas la meilleure idée, mais dans le cas où vous et vous seul contrôlez la source et surtout si vous la codifiez en dur. comme il a été dit dans la question, alors juste perdre les citations!