Unexpected end of JSON input
El parser llegó al final de la entrada cuando todavía esperaba más. O la cadena estaba vacía desde el principio, o un valor quedó abierto y el documento estaba truncado. Fíjate en que este mensaje no lleva posición, y eso es justo lo que lo distingue de los errores que sí la llevan.
Pega tu JSON y ve exactamente dónde se rompe
Nada de lo que pegues sale de tu navegador. La lista de permitidos de connect-src convierte eso en una garantía del navegador, no en una promesa. Compruébalo tú mismo
Qué lo provoca realmente
Ordenados por la frecuencia con la que cada uno acaba siendo la respuesta.
-
01 La cadena está vacía
JSON.parse("") lanza esto de inmediato. Una cadena vacía no es JSON válido. Suele venir de un HTTP 204, de una respuesta sin cuerpo, o de una clave de localStorage que se escribió como cadena vacía.
Falla
JSON.parse(localStorage.getItem('draft'))Funciona
const raw = localStorage.getItem('draft'); const draft = raw ? JSON.parse(raw) : null; -
02 El cuerpo de la respuesta ya se había consumido
El cuerpo de un Response solo se puede leer una vez. Llamar a res.text() y luego a res.json() sobre la misma respuesta te da una cadena vacía la segunda vez.
Falla
const text = await res.text(); const data = await res.json(); // body already usedFunciona
const text = await res.text(); const data = text ? JSON.parse(text) : null; -
03 El documento está truncado
Una conexión caída, un límite de tamaño de cuerpo (Express usa 100 kB por defecto), una lectura de stream que terminó antes de tiempo, o un archivo que se escribía mientras se leía. Si la entrada termina a mitad de un objeto, nuestro validador nombra cada corchete que quedó abierto y dónde empezó cada uno.
Falla
{"users": [{"id": 1}, {"id":Funciona
{"users": [{"id": 1}, {"id": 2}]} -
04 La caché de npm o de yarn está corrupta
Buena parte de las búsquedas de esta cadena son sobre npm y no sobre código de aplicación. Un archivo de caché escrito a medias produce el mismo error durante la instalación. Ejecuta npm cache clean --force, borra node_modules y package-lock.json, y vuelve a instalar.
-
05 Has parseado el resultado de una función que no devolvió nada
JSON.parse(undefined) da un mensaje distinto ("undefined" is not valid JSON), pero una función que devuelve una cadena vacía en vez de undefined acaba aquí.
El mismo error en otros entornos
El problema de fondo es idéntico; solo cambia la redacción. Si un compañero reporta alguno de estos, está mirando exactamente lo mismo que tú.
| Python | Expecting value: line 1 column 1 (char 0) |
|---|---|
| Python, truncated object | Expecting ',' delimiter: line 1 column 28 (char 27) |
Preguntas frecuentes
- ¿Por qué este mensaje no trae línea ni columna?
- Porque no hay ninguna posición a la que apuntar. El fallo es que la entrada se acabó, así que el lugar problemático es el final del documento. Nuestro validador lo reporta como fin de la entrada y lista qué corchetes seguían abiertos.
- ¿JSON.parse(null) lanza esto?
- No. JSON.parse(null) convierte null a la cadena "null" y devuelve null, lo cual sorprende a mucha gente. Lo que lanza el error es la cadena vacía.
Arréglalo ahora
Pega el payload en la herramienta de arriba, o ve directamente a la creada para este trabajo.
Encuentra el corchete sin cerrar