2009-05-28 11 views
32

J'ai une chaîne dans ma base de données Je veux tirer dans ma page et convertir en un objet JavaScript.Comment convertir une chaîne JSON en objet JavaScript dans jQuery?

[ 
{id: 1,title: "Long Event", 
     start: new Date(2009, 5, 6, 14, 0),end: new Date(2009, 5, 11)}, 
{id: 2,title: "Repeating Event", 
     start: new Date(2009, 5, 2)}, 
{id: 3,title: "Meeting", 
     start: new Date(2009, 5, 20, 9, 0)}, 
{id: 4,title: "Click for Facebook", 
     start: new Date(2009, 5, 27, 16),end: new Date(2009, 5, 29), 
     url: "http://facebook.com/"} 
] 

Comment puis-je faire cela en utilisant jQuery?

+0

duplication possible de [Sérialiser à JSON dans jQuery] (http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery) – outis

Répondre

2

qu'en est-il de eval()?

var obj = eval (jsonString);

+0

Habituellement, ce n'est pas une très bonne idée d'utiliser eval, sauf s'il y a absolument pas d'autre moyen d'atteindre l'objectif à atteindre. – montrealist

+0

Vous avez un point, mais le risque est minime. La plupart du temps, vous évaluez JSON généré par votre propre code serveur, ce qui n'est jamais un risque de sécurité. Même jQuery appelle eval() pour convertir ajax JSON en objet. –

+0

Les solutions les plus simples sont la meilleure solution. Si vous connaissez la source de JSON que vous analysez, je pense que eval serait le meilleur choix. – Thinker

1

Jetez un oeil à JQuery-json plug-in

var thing = {plugin: 'jquery-json', version: 1.3}; 

var encoded = $.toJSON(thing);    //'{"plugin": "jquery-json", "version": 1.3}' 
var name = $.evalJSON(encoded).plugin;  //"jquery-json" 
var version = $.evalJSON(encoded).version; // 1.3 
0

utilisation

jQuery.getJSON(url, data, callback)

ou passer "JSON" comme paramètre de type :

jQuery.get(url, data, callback, type)

même pour:

jQuery.post(url, data, callback, type)

* tous dans le cas où vous récupérez la "chaîne" d'un requête ajax

7

Le script "officiel" json2.js inclut 2 méthodes: une qui va analyser en toute sécurité n'importe quelle chaîne JSON à un objet (JSON.parse) et une qui convertira un objet en une chaîne JSON (JSON.stringify)

Le script peut être trouvé here.

Dans mon post ci-dessus, je suggère eval(), mais il est en fait une manière légèrement mieux évaluer JSON (si vous ne voulez pas utiliser le script json2.js):

var obj = (new Function("return " + json))(); 

utilisant le script json2.js:

var obj = JSON.parse(json); 
+0

La plupart des navigateurs incluent un objet JSON natif ces jours-ci, il n'est donc plus nécessaire d'inclure json2.js. Il suffit d'utiliser 'JSON.parse (chaîne)' ou 'JSON.stringify (objet)' – AlexChaffee

+0

Le plus n'est pas tout –

-1

Bien que vous puissiez utiliser la commande eval, vous devez d'abord vérifier la sécurité. J'utilise:

var data = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/. 
      test(source.replace(/"(\\.|[^"\\])*"/g, '')))  
      && eval('(' + source + ')'); 

Cela devrait fonctionner (il a été légèrement modifié par rapport à l'original). Le point clé est que la chaîne JSON est vérifiée pour empêcher les fonctions et autres codes exécutables réels de se faufiler à travers. (Le premier regex est le bit important).

Cela dit, le plugin JSON est très bon.

64

À partir de jQuery 1.4.1 vous pouvez le faire en mode natif

jQuery.parseJSON 

Voir jQuery documentation.

+2

Répond parfaitement à la question de l'OP. – mkoistinen

+0

C'est le meilleur moyen, si vous utilisez déjà jQuery. –

Questions connexes