¿Qué causa este error en la tercera línea?
var products = [{
"name": "Pizza",
"price": "10",
"quantity": "7"
}, {
"name": "Cerveja",
"price": "12",
"quantity": "5"
}, {
"name": "Hamburguer",
"price": "10",
"quantity": "2"
}, {
"name": "Fraldas",
"price": "6",
"quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o
Abra la consola para ver el error
javascript
jquery
json
coiso
fuente
fuente
Respuestas:
products
Es un objeto. (creando a partir de un objeto literal)JSON.parse()
se usa para convertir una cadena que contiene notación JSON en un objeto Javascript.Su código convierte el objeto en una cadena (mediante una llamada
.toString()
) para intentar analizarlo como texto JSON.El valor predeterminado
.toString()
devuelve"[object Object]"
, que no es JSON válido; De ahí el error.fuente
.toString()
regresa (según la especificación).Digamos que sabes que es JSON válido pero todavía estás obteniendo esto ...
En ese caso, es probable que haya caracteres ocultos / especiales en la cadena de cualquier fuente que los obtenga. Cuando pega en un validador, se pierden, pero en la cadena todavía están allí. Esos caracteres, aunque invisibles, se romperán
JSON.parse()
Si
s
es su JSON sin procesar, límpielo con:fuente
s = s.replace(/[\u0000-\u001F]+/g,"");
lugar des = s.replace(/[\u0000-\u0019]+/g,"");
, para reemplazar todos los caracteres de control. ¿Correcto?Parece que quieres stringificar el objeto. Entonces haz esto:
La razón del error es que
JSON.parse()
espera unString
valor yproducts
es unArray
.Nota: Creo que intenta lo
json.parse('[object Array]')
que se queja de que no esperaba tokeno
después[
.fuente
Encontré el mismo problema con
JSON.parse(inputString)
.En mi caso, la cadena de entrada proviene de la página de mi servidor [devolución de un método de página] .
Imprimí el
typeof(inputString)
- era una cadena, aún se produce el error.También lo intenté
JSON.stringify(inputString)
, pero no ayudó.Más tarde descubrí que esto era un problema con el nuevo operador de línea
[\n]
, dentro de un valor de campo.Hice un reemplazo [con algún otro personaje, volví a colocar la nueva línea después del análisis] y todo funciona bien.
fuente
JSON.parse está esperando un String en el parámetro. Necesita stringificar su objeto JSON para resolver el problema.
fuente
cambiar a
fuente
JSON.parse
, los argumentos deben ser una cadena.JSON.parse(products.replace(/'/g, '"'))
Debe validar su cadena JSON aquí .
Una cadena JSON válida debe tener comillas dobles alrededor de las teclas:
Si no hay comillas, causará un error:
El uso de comillas simples también causará un error:
fuente
render ([key: value])
con comillas simples, lo que lleva al JSON parseError en la posición 1 en jquery Ajax.render (groovy.json.JsonOutput.toJson ([key:value]))
me ayudóSi hay espacios iniciales o finales, será inválido. Los espacios finales / iniciales se pueden eliminar como
Fuente: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
fuente
Aquí está tu Json perfecto que puedes analizar.
fuente
Aquí hay una función que hice en base a respuestas anteriores: funciona en mi máquina pero YMMV.
fuente
Otro problema que puede resultar en una
"SyntaxError: Unexpected token"
excepción cuando se llamaJSON.parse()
está usando cualquiera de los siguientes en los valores de cadena:Personajes de nueva línea.
Pestañas (¡sí, pestañas que puedes producir con la tecla Tab!)
Cualquier barra independiente
\
(pero por alguna razón no/
, al menos no en Chrome).(Para una lista completa vea el sección Cadena aquí ).
Por ejemplo, lo siguiente le dará esta excepción:
Por lo tanto, debe cambiarse a:
Lo cual, debo decir, lo hace bastante ilegible en formato solo JSON con una mayor cantidad de texto.
fuente
Cuando use el método POST o PUT, asegúrese de stringificar la parte del cuerpo.
He documentado un ejemplo aquí https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
fuente
Esperemos que esto ayude a alguien más.
Mi problema fue que había comentado HTML en una función de devolución de llamada PHP a través de AJAX que estaba analizando los comentarios y devolvía JSON no válido.
Una vez que eliminé el HTML comentado, todo estuvo bien y el JSON se analizó sin problemas.
fuente
productos es una matriz que se puede usar directamente:
fuente
Ahora, aparentemente
\r
,\b
,\t
,\f
, etc, no son los caracteres problemáticos única que le puede dar este error.Tenga en cuenta que algunos navegadores pueden tener requisitos adicionales para la entrada de
JSON.parse
.Ejecute este código de prueba en su navegador:
Al probar en Chrome, veo que no permite
JSON.parse(String.fromCharCode(0x22, x, 0x22));
dóndex
está 34, 92 o de 0 a 31.Los caracteres 34 y 92 son los caracteres
"
y\
respectivamente, y generalmente se esperan y se escapan correctamente. Son los caracteres 0 a 31 los que te darían problemas.Para ayudar con la depuración, antes de hacerlo
JSON.parse(input)
, primero verifique que la entrada no contenga caracteres problemáticos:fuente
¿Por qué necesitas JSON.parse? Ya está en una matriz de formato de objeto.
Mejor use JSON.stringify como se muestra a continuación:
var b = JSON.stringify(products);
Esto puede ayudarte.
fuente
Oh hombre, las soluciones en todas las respuestas anteriores proporcionadas hasta ahora no funcionaron para mí. Tuve un problema similar en este momento. Logré resolverlo envolviendo la cita. Mira la captura de pantalla. Whoo
Original:
fuente
El error que está obteniendo, es decir, "token inesperado o" es porque se espera json pero se obtiene el objeto durante el análisis. Esa "o" es la primera letra de la palabra "objeto".
fuente
El único error que está cometiendo es que está analizando un objeto ya analizado, por lo que es un error de lanzamiento, use esto y estará listo.
si desea imprimir todo json, use JSON.stringify ()
fuente
Puede suceder por muchas razones, pero probablemente por un carácter no válido, por lo que puede usarlo
JSON.stringify(obj);
para convertir su objeto en un JSON, pero recuerde que es una expresión JQUERY.fuente
Tengo este error PORQUE la API que devolvió el objeto json estaba dando UN ERROR (en mi caso Code Igniter, devuelve un html cuando falla el código php) así que NO ES UN OBJETO JSON.
Verifique las oraciones SQL y el código PHP, y pruébelo con Postman (o algún otro probador de API)
fuente
El error que estaba cometiendo fue pasar
null
(sin saberlo) a JSON.parse ().Entonces arrojó
Unexpected token n in JSON at position 0
fuente
Uso
eval
. Toma la expresión / código JavaScript como cadena y lo evalúa / ejecuta.fuente