Tech Help

Erros habituais de JSON: coma final, comiñas e Unexpected token

Corrixa JSON inválido: coma final, comiñas simples, chaves sen comiñas e Unexpected token. Por que falla JSON.parse e como validar JSON.

Resposta rápida

A maioría dos erros de JSON veñen de regras estritas: coma final, comiñas simples, nomes de propiedade sen comiñas, coma que falta, corchetes que non encaixan, escape inválido ou comentarios.

JSON semella un obxecto JavaScript, mais é máis estrito. Os nomes de propiedade e as cadeas precisan comiñas dobres.

Se ve Unexpected token, o carácter informado pode ser onde a análise parou—non necesariamente onde comezou o erro orixinal.

O seu JSON está marcado como inválido. Adoita ser un problema de sintaxe pequeno, non un formato de ficheiro estragado. Os sete erros de abaixo causan a maioría de Unexpected token.

Por que JSON se estraga tan doado?

JSON é un formato de datos con sintaxe estrita. Un literal de obxecto JavaScript pode semellar semellante e aínda ser JSON inválido. No JSON estándar, os nomes de propiedade e as cadeas precisan comiñas dobres, a coma final non está permitida e os comentarios non forman parte do formato.

1. Comas finais

A coma de máis despois da última propiedade é o problema. O JSON estándar non a permite.

Inválido

{
  "name": "Alex",
  "age": 30,
}

Válido

{
  "name": "Alex",
  "age": 30
}

A mesma regra vale para os arrays. Quite a coma despois do último elemento.

Inválido

[
  "red",
  "green",
]

Válido

[
  "red",
  "green"
]

2. Comiñas simples no lugar de dobres

JavaScript a miúdo acepta comiñas simples. JSON non. Os nomes de propiedade e os valores de cadea deben usar comiñas dobres.

Inválido

{
  'name': 'Alex'
}

Válido

{
  "name": "Alex"
}

3. Nomes de propiedade sen comiñas

En JavaScript ás veces pode escribir name sen comiñas. En JSON cada nome de propiedade debe ser unha cadea con comiñas dobres.

Inválido

{
  name: "Alex",
  age: 30
}

Válido

{
  "name": "Alex",
  "age": 30
}

4. Comas que faltan entre valores

As propiedades e os elementos de array precisan unha coma no medio. O analizador pode informar Unexpected token na comiña ou chave seguinte, non na coma que falta.

Inválido

{
  "name": "Alex"
  "age": 30
}

Válido

{
  "name": "Alex",
  "age": 30
}

5. Corchetes e chaves que faltan ou sobran

Os obxectos usan { }. Os arrays usan [ ]. O JSON aniñado a miúdo falla cando falta ], sobra } ou se intercambiaron. Conte os pares de abertura e peche.

Inválido

{
  "items": [1, 2
}

Válido

{
  "items": [1, 2]
}

6. Secuencias de escape inválidas

Dentro dunha cadea JSON, a barra invertida inicia un escape. Secuencias como ", \ e \n son válidas. Un camiño Windows escrito C:\Users non o é: \U non é un escape JSON legal. Dobre as barras invertidas, ou o analizador para nese carácter.

Inválido

{"file":"C:\Users\Alex"}

Válido

{"file":"C:\\Users\\Alex"}

7. Comentarios dentro de JSON

O JSON estándar non ten comentarios. Algunhas ferramentas de configuración aceptan // ou /* */ (JSONC, JSON5 e semellantes). Iso non é JSON estándar, e JSON.parse rexeitao.

Inválido

{
  // user name
  "name": "Alex"
}

Que quere dicir Unexpected token?

O analizador atopou un carácter non permitido nesa posición. O punto informado é onde a lectura parou. Se omitiu unha coma antes, o erro pode apuntar á comiña da propiedade seguinte. A redacción varía segundo o tempo de execución; non espere que cada navegador imprima a mesma frase.

Que quere dicir Unexpected end of JSON input?

O texto rematou antes de que o valor fose completo. Causas típicas: falta } ou ], entrada truncada, corpo baleiro ou unha resposta de API cortada. Non é un só erro.

Por que falla JSON.parse()?

JSON.parse() só acepta texto JSON válido. Isto funciona:

const text = '{"name":"Alex"}';
const data = JSON.parse(text);

Isto falla, porque as comiñas simples non son JSON:

const text = "{'name':'Alex'}";
JSON.parse(text);

A mensaxe de erro exacta depende do tempo de execución de JavaScript. Trate a mensaxe como pista e inspecte comas, comiñas e corchetes preto desa posición.

JSON non é o mesmo ca un obxecto JavaScript

Un literal de obxecto JavaScript pode semellar { name: 'Alex' }. O JSON válido debe semellar { "name": "Alex" }: nomes e cadeas con comiñas dobres, sen coma final, sen comentarios.

  • Texto JSON
  • O analizador le testemuños
  • Datos válidos ou Unexpected token
A marca de erro é onde a análise parou, que pode ser despois do erro real.

Como atopar un erro JSON axiña

Traballe nesta orde. Non comece reescribindo todo o ficheiro.

  1. Pase o JSON por un validador.
  2. Lea o primeiro erro informado.
  3. Mire un chisco antes da posición informada.
  4. Comprobe as comas, sobre todo as finais e as que faltan.
  5. Comprobe as comiñas: só dobres.
  6. Faga coincidir { } e [ ].
  7. Comprobe os escapes de barra invertida nas cadeas.
  8. Quite os comentarios se precisa JSON estrito.

Mapa rápido das correccións habituais:

Problema Corrección
Coma finalBorre a coma despois do último elemento.
Comiñas simplesUse comiñas dobres para nomes e cadeas.
Chave sen comiñasEnvolva o nome da propiedade con comiñas dobres.
Coma que faltaPoña unha coma entre propiedades ou elementos de array.
Corchete que faltaPeche cada par { } e [ ].
Escape inválidoUse un escape legal, ou dobre as barras invertidas nos camiños.
ComentarioQuite // e /* */ para JSON estándar.

Valide e formatee JSON no navegador

NEXNARA Formatador e comparación de JSON pode comprobar JSON neste dispositivo.

Pode validar, embelecer con 2 espazos, 4 espazos ou tabulador, minify, comparar dous documentos (JSON Diff) e abrir un ficheiro .json. A análise usa JSON.parse no navegador, non eval.

Os documentos de máis de 5 MB poden parecer lentos. O texto de máis de 15 MB non se procesa no navegador, para que a páxina se manteña receptiva.

O procesamento de JSON en si acontece no seu navegador. O texto non se envía a un servidor de NEXNARA para esta ferramenta. Os anuncios e outras funcións do sitio aínda usan a rede; iso é aparte do procesamento.

Precisa comprobar JSON inválido? Abra Formatador e comparación de JSON e pegue o texto.

FAQ

Por que o meu JSON di Unexpected token?

O analizador atopou un carácter non permitido nese punto. O erro real—a miúdo unha coma que falta ou unha comiña simple—pode estar xusto antes desa posición.

Están permitidas as comas finais en JSON?

Non. O JSON estándar non permite unha coma despois da última propiedade ou elemento de array. Os literais de obxecto JavaScript a miúdo si.

JSON pode usar comiñas simples?

Non. Os nomes de propiedade e as cadeas deben usar comiñas dobres.

JSON pode conter comentarios?

Non no JSON estándar. Algunhas ferramentas aceptan JSONC ou JSON5 con comentarios; JSON.parse rexeitaos igual.

Por que falla JSON.parse()?

A cadea non é JSON válido. Causas típicas: coma final, comiñas simples, chaves sen comiñas, comentarios ou un valor truncado. A mensaxe exacta depende do tempo de execución.

Como comprobo se o JSON é válido?

Pégueo nun validador como Formatador e comparación de JSON, ou chame JSON.parse nunha consola. Se a análise lanza, o texto non é JSON válido.