javascript - parse - Cadena JSON a objeto JS
string to json javascript (5)
Estoy usando un objeto JS para crear gráficos con la visualización de Google. Estoy tratando de diseñar la fuente de datos. Al principio, creé un objeto JS del lado del cliente.
var JSONObject = {
cols: [{id: ''date'', label: ''Date'', type: ''date''},
{id: ''soldpencils'', label: ''Sold Pencils'', type: ''number''},
{id: ''soldpens'', label: ''Sold Pens'', type: ''number''}],
rows: [{c:[{v: new Date(2008,1,1),f:''2/1/2008''},{v: 30000}, {v: 40645}]},
{c:[{v: new Date(2008,1,2),f:''2/2/2008''},{v: 14045}, {v: 20374}]},
{c:[{v: new Date(2008,1,3),f:''2/3/2008''},{v: 55022}, {v: 50766}]}]
};
var data = new google.visualization.DataTable(JSONObject, 0.5);
Ahora necesito recuperar los datos dinámicamente. Así que envío una solicitud AJAX a una página que devuelve la cadena JSON:
"cols: [{id: ''date'', label: ''Date'', type: ''date''},
{id: ''soldpencils'', label: ''Sold Pencils'', type: ''number''},
{id: ''soldpens'', label: ''Sold Pens'', type: ''number''}],
rows: [{c:[{v: new Date(2008,1,1),f:''2/1/2008''},{v: 30000}, {v: 40645}]},
{c:[{v: new Date(2008,1,2),f:''2/2/2008''},{v: 14045}, {v: 20374}]},
{c:[{v: new Date(2008,1,3),f:''2/3/2008''},{v: 55022}, {v: 50766}]}"
Esto lo guardo en una variable:
var var1 = "cols: [{i ....... 66}]}"
y mostrar como
alert(var1);
Ahora mi tarea es crear un objeto JS a partir de esta cadena. Esto no está funcionando. Cuando uso un objeto JS, todo funciona bien y puedo obtener el gráfico requerido. Ahora, si trato de poner el mismo valor de cadena de la solicitud AJAX que confirmé de un mensaje de alerta en un objeto, el objeto no se crea correctamente. Por favor déjeme saber su opinión y cualquier corrección o consejo.
Algunos navegadores modernos tienen soporte para analizar JSON en un objeto nativo:
var var1 = ''{"cols": [{"i" ....... 66}]}'';
var result = JSON.parse(var1);
Para los navegadores que no lo admiten, puede descargar json2.js de json.org para un análisis seguro de un objeto JSON. El script verificará la compatibilidad nativa con JSON y, si no existe, proporcionará el objeto global JSON en su lugar. Si el objeto nativo, más rápido, está disponible, simplemente saldrá del script y lo dejará intacto. Sin embargo, debe proporcionar un JSON válido o generará un error: puede verificar la validez de su JSON con http://jslint.com o http://jsonlint.com .
La cadena que está devolviendo no es JSON válida. Los nombres en los objetos deben citarse y toda la cadena debe colocarse en { … }
para formar un objeto. JSON tampoco puede contener algo como new Date()
. JSON es solo un pequeño subconjunto de JavaScript que solo tiene cadenas, números, objetos, matrices, true
, false
y null
.
Ver la gramática JSON para más información.
Puede usar esta biblioteca de JSON.org para traducir su cadena a un objeto JSON.
var var1_obj = JSON.parse(var1);
O también puede usar la biblioteca jquery-json .
var var1_obj = $.toJSON(var1);
Puede usar eval (jsonString) si confía en los datos de la cadena; de lo contrario, deberá analizarlos correctamente; consulte json.org para obtener algunos ejemplos de código.
la cadena en su pregunta no es una cadena json válida. Desde el sitio web json.org :
JSON está construido sobre dos estructuras:
* A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array. * An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.
Básicamente, una cadena json siempre comenzará con {o [.
Luego, como @Andy E y @Cryo dijeron que puedes analizar la cadena con json2.js o con otras bibliotecas.
En mi humilde opinión debe evitar evaluar porque funcionará con cualquier programa javascript, así que podría incurrir en problemas de seguridad.