2009-05-28 10 views
32

Tengo una cadena en mi base de datos. Quiero ingresar a mi página y convertirla en un objeto JavaScript.¿Cómo convierto una cadena JSON a un objeto JavaScript en 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/"} 
] 

¿Cómo puedo hacer esto usando jQuery?

+0

posible duplicado de [serializar a JSON en jQuery] (http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery) – outis

Respuesta

2

¿qué tal eval()?

var obj = eval (jsonString);

+0

Por lo general, no es una buena idea usar eval, a menos que haya absolutamente ninguna otra manera de lograr el objetivo en cuestión. – montrealist

+0

Tiene un punto, pero el riesgo es mínimo. La mayoría de las veces, está evaluando JSON generado por su propio código de servidor, que nunca es un riesgo de seguridad. Incluso jQuery hace llamadas eval() para convertir ajax JSON en un objeto. –

+0

Las soluciones más simples son la mejor solución. Si conoce la fuente de JSON que está analizando, creo que eval sería la mejor opción. – Thinker

1

Tome un vistazo a JQuery-json complemento

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

uso

jQuery.getJSON(url, data, callback)

o pasar "json" como el tipo parámetro:

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

mismo se aplica a:

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

* todo en el caso de que esté recogiendo la "cadena" de una solicitud ajax

7

La secuencia de comandos "oficial" json2.js incluye 2 métodos: uno que analizará con seguridad cualquier cadena JSON a un objeto (JSON.parse) y una que convertirá un objeto en una cadena JSON (JSON.stringify)

La secuencia de comandos se puede encontrar en here.

En mi post anterior, me sugirió eval(), pero no es en realidad un poco mejor manera de evaluar JSON (si no desea utilizar la secuencia de comandos json2.js):

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

usando la secuencia de comandos json2.js:

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

La mayoría de los navegadores incluyen un objeto JSON nativo en estos días, por lo que ya no es necesario incluir json2.js. Solo use 'JSON.parse (cadena)' o 'JSON.stringify (object)' – AlexChaffee

+0

La mayoría no es todo –

-1

Si bien puede utilizar el comando eval, primero debe verificarlo para mayor seguridad. Yo uso:

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

Eso debería funcionar (se ha ajustado un poco de la original). El punto clave es que la cadena JSON está marcada para evitar que las funciones y otros códigos ejecutables se filtren. (La primera expresión regular es el bit importante).

Dicho esto, el plugin JSON es muy bueno.

64

A partir de jQuery 1.4.1 se puede hacer esto de forma nativa

jQuery.parseJSON 

Ver jQuery documentation.

+2

Responde perfectamente la pregunta del OP. – mkoistinen

+0

Esa es la mejor manera, si ya está usando jQuery. –

Cuestiones relacionadas