Tech Help

Errors habituals de JSON: coma final, cometes i Unexpected token

Corregiu JSON invàlid: coma final, cometes simples, claus sense cometes i Unexpected token. Per què falla JSON.parse i com validar JSON.

Resposta ràpida

La majoria d’errors de JSON venen de regles estrictes: coma final, cometes simples, noms de propietat sense cometes, coma que falta, claudàtors que no encaixen, escape invàlid o comentaris.

JSON s’assembla a un objecte JavaScript, però és més estricte. Els noms de propietat i les cadenes necessiten cometes dobles.

Si veieu Unexpected token, el caràcter reportat pot ser on s’ha aturat l’anàlisi—no necessàriament on va començar l’error original.

El vostre JSON està marcat com a invàlid. Sol ser un problema de sintaxi petit, no un format de fitxer trencat. Els set errors de sota causen la majoria d’Unexpected token.

Per què JSON es trenca tan fàcilment?

JSON és un format de dades amb sintaxi estricta. Un literal d’objecte JavaScript pot semblar-se’n i tot i així ser JSON invàlid. En JSON estàndard, els noms de propietat i les cadenes necessiten cometes dobles, la coma final no és permesa i els comentaris no formen part del format.

1. Comes finals

La coma de més després de l’última propietat és el problema. El JSON estàndard no la permet.

Invàlid

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

Vàlid

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

La mateixa regla val per als arrays. Traieu la coma després de l’últim element.

Invàlid

[
  "red",
  "green",
]

Vàlid

[
  "red",
  "green"
]

2. Cometes simples en lloc de dobles

JavaScript sovint accepta cometes simples. JSON no. Els noms de propietat i els valors de cadena han d’usar cometes dobles.

Invàlid

{
  'name': 'Alex'
}

Vàlid

{
  "name": "Alex"
}

3. Noms de propietat sense cometes

En JavaScript de vegades es pot escriure name sense cometes. En JSON cada nom de propietat ha de ser una cadena amb cometes dobles.

Invàlid

{
  name: "Alex",
  age: 30
}

Vàlid

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

4. Comes que falten entre valors

Les propietats i els elements d’array necessiten una coma entremig. L’analitzador pot reportar Unexpected token a la cometa o clau següent, no a la coma que falta.

Invàlid

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

Vàlid

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

5. Claudàtors i claus que falten o sobren

Els objectes usen { }. Els arrays usen [ ]. El JSON imbricat sovint falla quan falta ], sobra } o s’han intercanviat. Compteu els parells d’obertura i tancament.

Invàlid

{
  "items": [1, 2
}

Vàlid

{
  "items": [1, 2]
}

6. Seqüències d’escape invàlides

Dins d’una cadena JSON, la barra invertida inicia un escape. Seqüències com ", \ i \n són vàlides. Un camí Windows escrit C:\Users no ho és: \U no és un escape JSON legal. Dobleu les barres invertides, o l’analitzador s’atura en aquell caràcter.

Invàlid

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

Vàlid

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

7. Comentaris dins de JSON

El JSON estàndard no té comentaris. Algunes eines de configuració accepten // o /* */ (JSONC, JSON5 i similars). Això no és JSON estàndard, i JSON.parse ho rebutja.

Invàlid

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

Què vol dir Unexpected token?

L’analitzador ha trobat un caràcter no permès en aquella posició. El punt reportat és on s’ha aturat la lectura. Si heu omès una coma abans, l’error pot apuntar a la cometa de la propietat següent. El redactat varia segons el temps d’execució; no espereu que cada navegador imprimeixi la mateixa frase.

Què vol dir Unexpected end of JSON input?

El text s’ha acabat abans que el valor fos complet. Causes típiques: falta } o ], entrada truncada, cos buit o una resposta d’API tallada. No és un sol error.

Per què falla JSON.parse()?

JSON.parse() només accepta text JSON vàlid. Això funciona:

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

Això falla, perquè les cometes simples no són JSON:

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

El missatge d’error exacte depèn del temps d’execució de JavaScript. Tracteu el missatge com a pista i inspeccioneu comes, cometes i claudàtors a prop d’aquella posició.

JSON no és el mateix que un objecte JavaScript

Un literal d’objecte JavaScript pot semblar { name: 'Alex' }. El JSON vàlid ha de semblar { "name": "Alex" }: noms i cadenes amb cometes dobles, sense coma final, sense comentaris.

  • Text JSON
  • L’analitzador llegeix testimonis
  • Dades vàlides o Unexpected token
La marca d’error és on s’ha aturat l’anàlisi, que pot ser després de l’error real.

Com trobar un error JSON de pressa

Treballau en aquest ordre. No comenceu reescrivint tot el fitxer.

  1. Passeu el JSON per un validador.
  2. Llegiu el primer error reportat.
  3. Mireu una mica abans de la posició reportada.
  4. Comproveu les comes, especialment les finals i les que falten.
  5. Comproveu les cometes: només dobles.
  6. Feu coincidir { } i [ ].
  7. Comproveu els escapes de barra invertida a les cadenes.
  8. Traieu els comentaris si necessiteu JSON estricte.

Mapa ràpid de les correccions habituals:

Problema Correcció
Coma finalSuprimiu la coma després de l’últim element.
Cometes simplesUseu cometes dobles per a noms i cadenes.
Clau sense cometesEmboliqueu el nom de la propietat amb cometes dobles.
Coma que faltaPoseu una coma entre propietats o elements d’array.
Claudàtor que faltaTanqueu cada parell { } i [ ].
Escape invàlidUseu un escape legal, o dobleu les barres invertides als camins.
ComentariTraieu // i /* */ per a JSON estàndard.

Valideu i formateu JSON al navegador

NEXNARA Formatar i comparar JSON pot comprovar JSON en aquest dispositiu.

Podeu validar, embellir amb 2 espais, 4 espais o tabulador, minify, comparar dos documents (JSON Diff) i obrir un fitxer .json. L’anàlisi usa JSON.parse al navegador, no eval.

Els documents de més de 5 MB poden semblar lents. El text de més de 15 MB no es processa al navegador, perquè la pàgina es mantingui àgil.

El processament de JSON en si passa al vostre navegador. El text no s’envia a un servidor de NEXNARA per a aquesta eina. Els anuncis i altres funcions del lloc encara usen la xarxa; això és separat del processament.

Cal comprovar JSON invàlid? Obriu Formatar i comparar JSON i enganxeu el text.

FAQ

Per què el meu JSON diu Unexpected token?

L’analitzador ha trobat un caràcter no permès en aquell punt. L’error real—sovint una coma que falta o una cometa simple—pot seure just abans d’aquella posició.

Són permeses les comes finals en JSON?

No. El JSON estàndard no permet una coma després de l’última propietat o element d’array. Els literals d’objecte JavaScript sovint sí.

JSON pot usar cometes simples?

No. Els noms de propietat i les cadenes han d’usar cometes dobles.

JSON pot contenir comentaris?

No en JSON estàndard. Algunes eines accepten JSONC o JSON5 amb comentaris; JSON.parse els rebutja igualment.

Per què falla JSON.parse()?

La cadena no és JSON vàlid. Causes típiques: coma final, cometes simples, claus sense cometes, comentaris o un valor truncat. El missatge exacte depèn del temps d’execució.

Com comprovo si el JSON és vàlid?

Enganxeu-lo en un validador com Formatar i comparar JSON, o crideu JSON.parse en una consola. Si l’anàlisi llança, el text no és JSON vàlid.