Inicio·Mensajes de error

chrome 111+ · JavaScript

El mensaje

SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

Qué significa

Lo que le pasaste a JSON.parse era HTML, no JSON. El fragmento <!DOCTYPE citado en el mensaje es la prueba, y significa que el servidor respondió con una página HTML —un 404, un 502 o una redirección de inicio de sesión—, así que el error real está antes del análisis, en la petición. Causas típicas: la URL equivocada, un proxy del servidor de desarrollo que sirvió index.html en lugar de la API, o una sesión caducada que te redirigió al login. Comprueba res.ok antes de llamar a res.json() y lee res.text() para ver qué llegó de verdad; golpear la URL con curl -s es la forma más rápida de mirar. Antes de Chrome 111 y Node 20 el mismo error decía Unexpected token < in JSON at position 0.

El arreglo

curl -s https://api.example.com/data | head -5
Lo imprime
chrome 111+
JavaScript
15

Los errores del navegador y de Node suelen decirte qué se rompió y no por qué el valor llegó a ser así —leíste undefined, no era una función, no era JSON—, así que el lugar del arreglo está aguas arriba de la línea que lanzó el error, y silenciar solo esa línea con ?. y valores por defecto hace que el mismo problema reaparezca más lejos y con una forma más difícil de reconocer.

Cómo leer un mensaje de error

  • Lee desde la primera línea. Cuanto más abajo, más son las tripas de la herramienta; la causa suele estar arriba.
  • Si hay un archivo y un número de línea, empieza ahí: no el marco superior de la pila, sino la línea más alta que nombre un archivo tuyo.
  • Busca el mensaje literal, pero quita antes tus rutas y nombres de variables: eso es lo que impide que la búsqueda coincida.
  • La misma condición se redacta distinto según la versión. Si los resultados no cuadran, añade el número de versión.
  • Antes de pegar un arreglo, comprueba qué descarta. Algunos no se pueden deshacer.

Preguntas frecuentes

Q. ¿Qué significa «SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON»?

Lo que le pasaste a JSON.parse era HTML, no JSON. El fragmento <!DOCTYPE citado en el mensaje es la prueba, y significa que el servidor respondió con una página HTML —un 404, un 502 o una redirección de inicio de sesión—, así que el error real está antes del análisis, en la petición. Causas típicas: la URL equivocada, un proxy del servidor de desarrollo que sirvió index.html en lugar de la API, o una sesión caducada que te redirigió al login. Comprueba res.ok antes de llamar a res.json() y lee res.text() para ver qué llegó de verdad; golpear la URL con curl -s es la forma más rápida de mirar. Antes de Chrome 111 y Node 20 el mismo error decía Unexpected token < in JSON at position 0.

Q. ¿Cómo se arregla?

curl -s https://api.example.com/data | head -5 — antes de ejecutarlo, mira arriba qué descarta este comando.

Q. ¿Qué herramienta lo imprime?

chrome 111+. Está en JavaScript y el mensaje tiene 10 palabras.

Errores cercanos