Dada una cadena de datos JSON, ¿cómo puedo convertir esa cadena de manera segura en un objeto JavaScript?
Obviamente puedo hacer esto de forma insegura con algo como:
var obj = eval("(" + json + ')');
pero eso me deja vulnerable a la cadena JSON que contiene otro código, que parece muy peligroso simplemente evaluar.
javascript
json
Matt Sheppard
fuente
fuente
eval
para analizar una cadena JSON porque estaría exponiendo su código a "inyección de código". Usar en suJSON.parse(yourString)
lugar.Respuestas:
JSON.parse(jsonString)
es un enfoque de JavaScript puro siempre que pueda garantizar un navegador razonablemente moderno.fuente
Requires document to be in IE8+ standards mode to work in IE8.
El método jQuery ahora está en desuso. Use este método en su lugar:
Respuesta original usando la funcionalidad de jQuery en desuso :
Si estás usando jQuery solo usa:
Es exactamente lo que está buscando (consulte la documentación de jQuery ).
fuente
jQuery.parseJSON
el uso predeterminado esJSON.parse
si existe, por lo que la única razón para usar esto sobre el real es si necesita un respaldo para <IE7. Se cambió en jQuery 1.6: james.padolsey.com/jquery/#v=1.6.0&fn=jQuery.parseJSONEsta respuesta es para IE <7, para navegadores modernos verifique la respuesta de Jonathan arriba.
Esta respuesta está desactualizada y la respuesta de Jonathan anterior (
JSON.parse(jsonString)
) ahora es la mejor respuesta .JSON.org tiene analizadores JSON para muchos idiomas, incluidos cuatro diferentes para JavaScript. Creo que la mayoría de la gente consideraría json2.js su implementación de goto.
fuente
Use el ejemplo de código simple en " JSON.parse () ":
y revertirlo:
fuente
No estoy seguro de otras formas de hacerlo, pero así es como lo haces en Prototype (tutorial de JSON) .
Llamar
evalJSON()
con verdadero como argumento desinfecta la cadena entrante.fuente
Este parece ser el problema:
Una entrada que se recibe a través de Ajax websocket, etc., y estará en formato de cadena, pero debe saber si es así
JSON.parsable
. El problema es que, si siempre lo ejecutaJSON.parse
, el programa PUEDE continuar "con éxito", pero aún verá un error en la consola con el temido"Error: unexpected token 'x'"
.fuente
(function(){ postCookiesToHostileServer(); }());
cosas aún más desagradables en el contexto de Node.Si está usando jQuery , también puede usar:
Entonces puedes hacer cosas como
etc.
fuente
A la devolución de llamada se le pasan los datos devueltos, que serán un objeto o matriz de JavaScript según lo definido por la estructura JSON y analizado utilizando el
$.parseJSON()
método.fuente
Solo por diversión, aquí hay una manera de usar una función:
fuente
eval
para hacerlo y no es seguro. : Peval
pero es más complicado y más difícil de entender para los encargados del mantenimiento.Usar
JSON.parse
es probablemente la mejor manera.Aquí hay un ejemplo de demostración en vivo .
fuente
La forma más fácil de usar el
parse()
método:Luego puede obtener los valores de los elementos JSON, por ejemplo:
Usando jQuery como se describe en la
jQuery.parseJSON()
documentación:fuente
Intente usar el método con este objeto de datos. ex:
Data='{result:true,count:1}
'Este método realmente ayuda en Nodejs cuando trabajas con programación de puerto serie
fuente
eval
oFunction
sea igualmente vulnerableundefined; function bye() {...} bye();
Encontré una forma "mejor":
En CoffeeScript:
En Javascript:
fuente
El análisis JSON siempre es un dolor. Si la entrada no es la esperada, arroja un error y bloquea lo que está haciendo.
Puede usar la siguiente pequeña función para analizar de forma segura su entrada. Siempre convierte un objeto incluso si la entrada no es válida o si ya es un objeto, lo cual es mejor para la mayoría de los casos:
fuente
Object.prototype.toString.call(input) === '[object Object]'
debería sertypeof input === 'object'
IMOnull
caso antes, y una matriz es un Objeto. Si quieres probarlo, puedes usarloinstanceof
. Además, si le da a esta función unArray
, se capturará yreturn def
cuándo podría haber devuelto la matriz perfectamente fina.toString()
método para verificar si una variable es un objeto o no. Vea AngularJS , jQuery , Underscore o incluso desarrolladoresjson.parse cambiará a objeto.
fuente
Si tenemos una cadena como esta:
entonces podemos simplemente usar
JSON.parse
dos veces para convertir esta cadena en un objeto JSON:Y podemos extraer valores del objeto JSON usando:
El resultado será:
fuente
JSON.parse()
convierte cualquier cadena JSON pasada a la función en un objeto JSON.Para entenderlo mejor, presione F12para abrir "Inspeccionar elemento" en su navegador y vaya a la consola para escribir los siguientes comandos:
Ahora ejecuta el comando:
Obtendrá salida como un objeto
{result: true, count: 1}
.Para usar ese objeto, puede asignarlo a la variable, tal vez
obj
:Mediante el uso
obj
y el punto (.
operador ) puede acceder a las propiedades del objeto JSON.Intenta ejecutar el comando:
fuente
Documentación oficial :
El
JSON.parse()
método analiza una cadena JSON, construyendo el valor de JavaScript u objeto descrito por la cadena. Un opcionalreviver
puede proporcionar una función para realizar una transformación en el objeto resultante antes de que se devuelva.Sintaxis:
Parámetros:
text
: La cadena para analizar como JSON. Consulte el objeto JSON para obtener una descripción de la sintaxis JSON.reviver (optional)
: Si es una función, esto prescribe cómo se transforma el valor producido originalmente por el análisis antes de ser devuelto.Valor de retorno
El objeto correspondiente al texto JSON dado.
Excepciones
Lanza una excepción SyntaxError si la cadena a analizar no es JSON válida.
fuente
Convertir el objeto a JSON, y luego analizarlo, funciona para mí, como:
fuente
Analice la cadena JSON con
JSON.parse()
, y los datos se convierten en un objeto JavaScript:Aquí, JSON representa procesar el conjunto de datos JSON.
Imagine que recibimos este texto de un servidor web:
Para analizar en un objeto JSON:
Aquí
obj
está el objeto JSON respectivo que se parece a:Para obtener un valor, use el
.
operador:Convierta un objeto JavaScript en una cadena con
JSON.stringify()
.fuente
Solo para analizar la cubierta para diferentes tipos de entrada
Analice los datos con JSON.parse (), y los datos se convierten en un objeto JavaScript.
Cuando se utiliza JSON.parse () en un JSON derivado de una matriz, el método devolverá una matriz de JavaScript, en lugar de un objeto de JavaScript.
Los objetos de fecha no están permitidos en JSON. Para las fechas hacer algo como esto
Las funciones no están permitidas en JSON. Si necesita incluir una función, escríbala como una cadena.
fuente
Pregunta anterior, lo sé, sin embargo, nadie se da cuenta de esta solución mediante el uso de
new Function()
una función anónima que devuelve los datos.Solo un ejemplo:
Esto es un poco más seguro porque se ejecuta dentro de una función y no se compila en su código directamente. Entonces, si hay una declaración de función dentro de ella, no estará vinculada al objeto de ventana predeterminado.
Lo uso para 'compilar' la configuración de los elementos DOM (por ejemplo, el atributo de datos) simple y rápido.
fuente
Resumen:
Javascript (tanto el navegador como NodeJS) tienen un
JSON
objeto incorporado . En este objeto hay 2 métodos convenientes para tratarJSON
. Son los siguientes:JSON.parse()
TomaJSON
como argumento, devuelve el objeto JSJSON.stringify()
Toma el objeto JS como argumento devuelve elJSON
objetoOtras aplicaciones:
Además, para tratarlos de manera muy conveniente
JSON
, pueden utilizarse para otros medios. La combinación de ambosJSON
métodos nos permite hacer clones profundos de matrices u objetos muy fácilmente. Por ejemplo:fuente
También puede usar la
reviver
función para filtrar.Para más información lea
JSON.parse
.fuente
JSON.parse es la forma correcta de convertir una cadena en un objeto, pero si la cadena que se analiza no es un objeto o si la cadena no es correcta, arrojará un error que hará que el resto del código se rompa. ideal para envolver la función JSON.parse dentro de try-catch like
fuente
Prueba esto. Este está escrito en mecanografiado.
fuente
JSON.parse()
?fuente