por leer example enviar ejemplos javascript jquery json

javascript - leer - Untaught SyntaxError: Token inesperado con JSON.parse



jquery json example (15)

¿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


¿Por qué necesita JSON.parse? Ya está en una matriz de formato de objeto.

Es mejor utilizar JSON.stringify como a continuación: var b = JSON.stringify(products);

Esto puede ayudarte.


Ahora, aparentemente, /r , /b , /t , /f , etc. no son los únicos caracteres problemáticos que pueden ocasionar 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:

var arr = []; for(var x=0; x < 0xffff; ++x){ try{ JSON.parse(String.fromCharCode(0x22, x, 0x22)); }catch(e){ arr.push(x); } } console.log(arr);

Probando en Chrome, veo que no permite JSON.parse(String.fromCharCode(0x22, x, 0x22)); donde x es 34, 92, o de 0 a 31.

Los caracteres 34 y 92 son los caracteres " y " , respectivamente, y por lo general se esperan y se escapan correctamente. Son caracteres 0 a 31 que te darían problemas.

Para ayudar con la depuración, antes de hacer JSON.parse(input) , primero verifique que la entrada no contenga caracteres problemáticos:

function VerifyInput(input){ for(var x=0; x<input.length; ++x){ let c = input.charCodeAt(x); if(c >= 0 && c <= 31){ throw ''problematic character found at position '' + x; } } }


Aquí hay una función que hice en base a las respuestas anteriores: funciona en mi máquina, pero YMMV.

/** * @description Converts a string response to an array of objects. * @param {string} string - The string you want to convert. * @returns {array} - an array of objects. */ function stringToJson(input) { var result = []; //replace leading and trailing [], if present input = input.replace(/^/[/,''''); input = input.replace(//]$/,''''); //change the delimiter to input = input.replace(/},{/g,''};;;{''); // preserve newlines, etc - use valid JSON //https://.com/questions/14432165/uncaught-syntaxerror-unexpected-token-with-json-parse input = input.replace(///n/g, "//n") .replace(///'/g, "//'") .replace(///"/g, ''//"'') .replace(///&/g, "//&") .replace(///r/g, "//r") .replace(///t/g, "//t") .replace(///b/g, "//b") .replace(///f/g, "//f"); // remove non-printable and other non-valid JSON chars input = input.replace(/[/u0000-/u0019]+/g,""); input = input.split('';;;''); input.forEach(function(element) { // console.log(JSON.stringify(element)); result.push(JSON.parse(element)); }, this); return result; }



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 pegues en un validador, se pierden, pero en la cadena todavía están allí. Esos caracteres, aunque invisibles, romperán JSON.parse()

Si s es su JSON sin procesar, entonces límpielo con:

// preserve newlines, etc - use valid JSON s = s.replace(///n/g, "//n") .replace(///'/g, "//'") .replace(///"/g, ''//"'') .replace(///&/g, "//&") .replace(///r/g, "//r") .replace(///t/g, "//t") .replace(///b/g, "//b") .replace(///f/g, "//f"); // remove non-printable and other non-valid JSON chars s = s.replace(/[/u0000-/u0019]+/g,""); var o = JSON.parse(s);


Encontré el mismo problema con JSON.parse(inputString) .

En mi caso, la cadena de entrada proviene de la página de mi servidor [return of a page method] .

typeof(inputString) el typeof(inputString) - era string, aún se produce el error.

También probé 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, devolví la nueva línea después del análisis] y todo está funcionando bien.


Espero que esto ayude a alguien más.

Mi problema era que había comentado HTML en una función de devolución de llamada de PHP a través de AJAX que estaba analizando los comentarios y devolvía el JSON no válido.

Una vez que eliminé el HTML comentado, todo estaba bien y el JSON se analizó sin problemas.


JSON.parse está esperando un parámetro String in. Necesita stringificar su objeto JSON para resolver el problema.

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(JSON.stringify(products)); //solves the problem


Otro error que puede dar como resultado la "SyntaxError: Unexpected token" al llamar a JSON.parse() está utilizando cualquiera de los siguientes en los valores de cadena:

  1. Caracteres de nueva línea.

  2. Pestañas (sí, pestañas que puedes producir con la tecla Tabulador)

  3. Cualquier barra inclinada / (pero por alguna razón no / , al menos no en Chrome).

(Para obtener una lista completa, consulte la sección de cadenas aquí ).

Por ejemplo, lo siguiente le dará esta excepción:

{ "msg" : { "message": "It cannot contain a new-line", "description": "Some discription with a tabbed space is also bad", "value": "It cannot have 3/4 un-escaped" } }

Entonces debería ser cambiado a:

{ "msg" : { "message": "It cannot/ncontain a new-line", "description": "Some discription with a/t/ttabbed space", "value": "It cannot have 3//4 un-escaped" } }

Lo cual, debería decir, lo hace bastante ilegible en formato solo JSON con mayor cantidad de texto.


Parece que quieres stringify el objeto.
Entonces, debes usar:

JSON.stringify(products);

El motivo del error es que JSON.parse() espera un valor de String y products es una Array .

Nota: Creo que intenta json.parse(''[object Array]'') que se queja de que no esperaba el token o después de [ .


Use eval . Toma la expresión / código JavaScript como una cadena y la evalúa / ejecuta.

eval(inputString);


productos es una matriz que se puede usar directamente:

var i, j; for(i=0;i<products.length;i++) for(j in products[i]) console.log("property name: " + j,"value: "+products[i][j]);


products es un objeto. (creando desde un objeto literal)

JSON.parse() se utiliza para convertir una cadena que contiene notación JSON en un objeto Javascript.

Su código convierte el objeto en una cadena (llamando a .toString() ) para intentar analizarlo como texto JSON.
El valor predeterminado .toString() devuelve "[object Object]" , que no es JSON válido; de ahí el error.


[ { "name": "Pizza", "price": "10", "quantity": "7" }, { "name": "Cerveja", "price": "12", "quantity": "5" }, { "name": "Hamburguer", "price": "10", "quantity": "2" }, { "name": "Fraldas", "price": "6", "quantity": "2" } ]

Aquí está tu Json perfecto que puedes analizar.


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"}];

cambiar a

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"}]'';