Saltar al contenido
jsonbeautifiers
Español
V8 Verificado ejecutando el parser en Node v24.15.0, V8 13.6.233.17.

"[object Object]" is not valid JSON

JSON.parse espera una cadena. Cuando le pasas un objeto, JavaScript convierte primero ese objeto a cadena, y la conversión por defecto produce el texto literal "[object Object]". El parser entonces falla en la letra o de la posición 1. Los datos están bien; la llamada a parse es la que sobra.

También puede que lo veas escrito así

  • Unexpected token o in JSON at position 1

V8 reescribió la mayoría de sus mensajes de error de JSON en 2022. La redacción antigua sigue siendo la que muestran casi todos los resultados de búsqueda, pero ningún runtime actual la emite.

Pega tu JSON y ve exactamente dónde se rompe

Entrada

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.

  1. 01 El valor ya estaba parseado

    axios, jQuery.ajax y muchos clientes de API parsean el JSON por ti cuando el Content-Type lo indica. Volver a parsear el resultado es lo que provoca esto.

    Falla

    const res = await axios.get('/api/user');
    const user = JSON.parse(res.data);   // res.data is already an object

    Funciona

    const res = await axios.get('/api/user');
    const user = res.data;
  2. 02 Se guardó un objeto sin convertirlo con stringify

    localStorage y sessionStorage guardan cadenas. Pasarles un objeto llama a String(obj), lo que escribe el texto literal "[object Object]". En ese momento los datos se han perdido, no es que sean simplemente ilegibles.

    Falla

    localStorage.setItem('user', user);
    const back = JSON.parse(localStorage.getItem('user'));

    Funciona

    localStorage.setItem('user', JSON.stringify(user));
    const back = JSON.parse(localStorage.getItem('user'));
  3. 03 Se interpoló un objeto dentro de una plantilla de cadena

    Construir el cuerpo de una petición con `{"user": ${user}}` inserta "[object Object]" en vez del objeto. Construye el objeto y aplica stringify al conjunto.

    Falla

    body: `{"user": ${user}}`

    Funciona

    body: JSON.stringify({ user })

Preguntas frecuentes

¿Qué fue de "Unexpected token o in JSON at position 1"?
Esa era la redacción de V8 anterior a 2022 para el mismo error. La o era el segundo carácter de la cadena "[object Object]". El mensaje moderno cita en su lugar el texto problemático, lo cual es mucho más útil.
¿Cómo lo hago defensivo?
typeof value === "string" ? JSON.parse(value) : value. Es una salvaguarda razonable en una frontera que no controlas, aunque dentro de tu propio código es mejor saber cuál de los dos tienes.

Arréglalo ahora

Pega el payload en la herramienta de arriba, o ve directamente a la creada para este trabajo.

Inspeccionar un payload