Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

156
Visualizações
Token inesperado en JSON en la posición 0

Estoy tratando de leer un archivo .json con fs y analizar un objeto JavaScript usando la función JSON.parse().

 const json = JSON.parse(fs.readFileSync('./db.json', (err) => { if (err) throw err; }))
 { "hello": "world" }

Pero estoy recibiendo el siguiente error:

undefined:1 { ^ SyntaxError: Token inesperado en JSON en la posición 0

¿Alguien sabe lo que está mal?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

readFileSync devuelve un Buffer si no le indica qué codificación usar para convertir el contenido del archivo en texto. Si pasa un Buffer a JSON.parse , se convertirá en una cadena antes de analizarse. El valor predeterminado de toString de Buffer es UTF-8.

Así que hay un par de posibles problemas:

  1. El archivo no está en UTF-8
  2. Lo es, pero tiene una marca de orden de bytes (BOM) (lo cual es un poco inusual, UTF-8 tiene un orden de bytes fijo, pero hay uno definido y, a veces, los archivos lo tienen como un indicador de que están en UTF-8 )

Aparte de eso, readFileSync no acepta una devolución de llamada (devuelve su resultado o arroja un error en su lugar, porque es sincrónico; eso es lo que significa el sufijo Sync en la API de Node.js). (Si tuviera una devolución de llamada, throw err en esa devolución de llamada no tendría sentido. Por ejemplo, no arrojaría un error de la función a la que está llamando a readFileSync ).

Si el archivo no es UTF-8, dígale a readFileSync qué codificación usar (sugiero hacerlo siempre en lugar de depender de la conversión implícita a una cadena más adelante). Si está en (digamos) UTF-16LE ("UTF-16 little endian"), entonces haría esto:

 const data = JSON.parse(fs.readFileSync('./db.json', "utf16le"));

Si está en UTF-8 con una lista de materiales: el Buffer no elimina la lista de materiales cuando se convierte en cadena, por lo que termina con lo que parece un carácter extraño en la posición 0 que no le gusta a JSON.parse . Si ese es el caso, puedes hacer esto:

 const UTF8_BOM = "\u{FEFF}"; let json = fs.readFileSync('./db.json', "utf8"); if (json.startsWith(UTF8_BOM)) { // Remove the BOM json = json.substring(UTF8_BOM.length); } // Parse the JSON const data = JSON.parse(json);
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda