Convertir de forma segura una cadena JSON en un objeto

Dada una cadena de datos JSON, ¿cómo se puede convertir de forma segura esa cadena en un objeto JavaScript?

Obviamente puedes hacerlo de forma insegura con algo como...

var obj = eval("(" + json + ')');

...pero eso nos deja vulnerables a que la cadena json contenga otro código, que parece muy peligroso simplemente evaluar.

Edición: Esta respuesta es para IE < 7, para navegadores modernos revisa la respuesta de Jonathan arriba.

Editar: Esta respuesta es obsoleta y la respuesta de Jonathan arriba (JSON.parse(jsonString)) es ahora la mejor respuesta.

JSON.org tiene analizadores JSON para muchos lenguajes, incluyendo 4 diferentes para Javascript. Creo que la mayoría de la gente consideraría json2.js su implementación goto.

Comentarios (3)

No estoy seguro de otras formas de hacerlo, pero aquí está cómo se hace en Prototype (JSON tutorial).

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

Llamar a evalJSON() con true como argumento sanea la cadena entrante.

Comentarios (0)

Si usas jQuery, también puedes hacer simplemente $.getJSON(url, function(data) { });.

Entonces puedes hacer cosas como data.key1.something, data.key1.something_else, etc.

Comentarios (1)