Analizo pocos datos usando una clase de tipo en mi controlador. Obtengo datos de la siguiente manera:
{
"data":{
"userList":[
{
"id":1,
"name":"soni"
}
]
},
"status":200,
"config":{
"method":"POST",
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"/home/main/module/userlist",
"headers":{
"rt":"ajax",
"Tenant":"Id:null",
"Access-Handler":"Authorization:null",
"Accept":"application/json, text/plain, */*"
}
},
"statusText":"OK"
}
Traté de almacenar los datos así
var userData = _data;
var newData = JSON.parse(userData).data.userList;
¿Cómo puedo extraer la lista de usuarios a una nueva variable?
javascript
angularjs
json
Soniya Mohan
fuente
fuente
JSON.parse
. Intenta usarlouserData
directamente como un objeto.console.log(typeof userData)
muestraobject
, ya tiene un objeto javascript y no una cadena JSON que debe analizar.Unexpected token o in JSON
, lo más probable es que esté intentando analizar un objeto que ya está en forma analizada.Respuestas:
El JSON que publicó se ve bien, sin embargo, en su código, lo más probable es que ya no sea una cadena JSON, sino un objeto JavaScript. Esto significa que no es necesario analizar más.
Puede probar esto usted mismo, por ejemplo, en la consola de Chrome:
JSON.parse()
Convierte la entrada en una cadena. EltoString()
método de los objetos JavaScript por defecto devuelve[object Object]
, lo que resulta en el comportamiento observado.Pruebe lo siguiente en su lugar:
fuente
los primeros parámetros de función
JSON.parse
deben ser una Cadena, y sus datos son un objeto JavaScript, por lo que se convertirá en una Cadena[object object]
, debe usarJSON.stringify
antes de pasar los datosfuente
Nunca lo uses
JSON.parse
sin envolverlo entry-catch
bloque:fuente
Justo arriba
JSON.parse
, use:fuente
JSON.stringify()
convierte un objeto de JavaScript en una representación de cadena del mismo, que es lo contrario de lo queJSON.parse()
hace. Obtuviste elSyntaxError
porque estabas tratando de analizar algo que ya era un objeto. En la solución de @ Sukhchain, se convierte en una cadena para evitar eso.JSON.parse()
demasiado de forma redundante. Aunque es un proceso bastante rápido, el análisis JSON se realiza de forma sincrónica y potencialmente puede bloquear su interfaz de usuario, por lo que aconsejaría no usarlo. En cambio, puede verificar si su variable es un objeto, por ejemplo, usartypeof(userData) === 'object'
antes de intentar analizarlo.Bueno, quería decir que necesito para analizar objeto como éste:
var jsonObj = {"first name" : "fname"}
. Pero, en realidad no. Porque ya es un JSON.fuente
También podemos agregar cheques como este:
fuente
Se produce un error inesperado 'O' cuando se analizan los datos JSON o String.
Si es una cadena, ya está en cadena. El análisis termina con un error 'O' inesperado.
Me enfrenté de manera similar (aunque en un contexto diferente), resolví el siguiente error al eliminar JSON Producer.
La respuesta contiene el retorno de cadena "OK" . La anotación marcada como @Produces ({** MediaType.APPLICATION_JSON }) ** intenta analizar la cadena al formato JSON que da como resultado una 'O' inesperada .
Eliminar @Produces ({ MediaType.APPLICATION_JSON }) funciona bien. Salida: OK
Cuidado: también, en el lado del cliente, si realiza una solicitud ajax y utiliza JSON.parse ("OK"), arroja el token inesperado 'O'
O es la primera letra de la cadena
JSON.parse (objeto) se compara con jQuery.parseJSON (objeto);
JSON.parse ('{"name": "Yergalem", "city": "Dover"}'); --- Funciona bien
fuente