Cómo corregir un SyntaxError: Token inesperado < en JSON en posición 0

Los errores SyntaxError: Token inesperado < en JSON en posición 0 indican que una solicitud HTTP esperaba una respuesta JSON, pero en su lugar recibió datos no JSON.

Suponiendo que tienes acceso al código que envía la solicitud, investiga y depura más añadiendo lógica de manejo de errores que registre el error y los datos de respuesta en la consola. El enfoque de registro depende de si el código JavaScript utiliza fetch() o JSON.parse().


En este artículo se aborda la orientación de resolución de problemas para los errores Error de sintaxis: Token inesperado < en JSON en posición 0 y las siguientes variantes comunes:

¿Cuál es la causa de este error?

Este error se produce cuando una solicitud espera una respuesta JSON, pero la respuesta real está en un formato diferente. El analizador JSON lanza un error cuando detecta una respuesta no válida.

Las posibles causas de este error incluyen las siguientes:

En muchos casos, la respuesta inesperada es HTML o XML que contiene detalles de un error del lado del servidor.

¿Cómo puedo arreglarlo?

Añade el código de manejo de errores y registra los datos de error y respuesta en la consola para investigar por qué no se ha recibido un JSON válido. La forma en que se registran los datos depende de si el código utiliza fetch() o JSON.parse().

Las causas más comunes y sus soluciones incluyen las siguientes:

Registrar datos de respuesta de fetch()

Una función fetch() de JavaScript puede tener un aspecto similar a este:

Bloque de código Javascript que muestra una solicitud de la API Fetch a una URL de ejemplo, una promesa que devuelve el JSON de la respuesta y una promesa que hace algo con los datos. fetch('https://example.com/some/path/to/json') .then(response => response.json()) .then(data => console.log(data))

El error se produce cuando se llama a response.json() y los datos no se pueden convertir en JSON. Por ejemplo, la respuesta podría ser HTML o XML.

Imprime los datos en la consola creando un clon de la respuesta y añadiendo una función para manejar el error:

Bloque de código Javascript con números de línea que muestra una solicitud de la API Fetch a una URL de ejemplo, una promesa que clona la respuesta y devuelve su JSON, y una promesa que hace algo con los datos y registra los errores. Línea 1: let responseClone; Línea 2: fetch('https://example.com/some/path/to/json') Línea 3: .then(response => { Line 4: responseClone = response.clone(); Line 5: return response.json(); Line 6: }) Línea 7: .then(data => console.log(data)) Línea 8: .catch(error => { Line 9: console.log('Error parsing JSON from response:', error, responseClone); Line 10: responseClone.text() Line 11: .then(text => console.log('Received the following instead of valid JSON: ', text)) Line 12: }

Un objeto response solo puede leerse una vez. Por lo tanto, queremos hacer un clon del mismo para imprimirlo en la consola antes de que se lea la respuesta original en la Línea 5.

En la Línea 8, hemos añadido una función de manejo de errores. Si response.json() falla, se llama a esta función y registra el error y los datos de responseClone en la consola para su posterior análisis.

Registrar datos de respuesta de JSON.parse()

Si el código utiliza JSON.parse(data), registra los datos de respuesta en la consola añadiendo un enunciado try…catch para manejar el error:

Bloque de código Javascript que muestra un enunciado try-catch. El bloque try invoca JSON.parse(data) y el bloque catch registra los errores en la consola. try { JSON.parse(data); } catch (error) { console.log('Error parsing JSON:', error, data); }