¿Existe un requisito para json en node.js?

Resuelto Corno asked hace 13 años • 11 respuestas

Me gustaría incluir un par de archivos JSON en mi código JavaScript que se encuentran en el mismo directorio que mi archivo fuente de JavaScript.

Si quisiera incluir otro archivo JavaScript, simplemente podría usar require. Ahora estoy usando readFileSyncy __dirnamepara obtener el JSON, lo cual creo que es una forma fea de hacerlo.

¿Existe algo similar para require que me permita cargar un archivo JSON?

Corno avatar Aug 23 '11 21:08 Corno
Aceptado

A partir del nodo v0.5.x, sí, puede requerir su JSON tal como requeriría un archivo js.

var someObject = require('./somefile.json')

En ES6:

import someObject from './somefile.json'
goatslacker avatar Aug 23 '2011 18:08 goatslacker

Los archivos JSON no requieren una declaración de exportación explícita. No es necesario exportarlo para usarlo como archivos Javascript.

Por lo tanto, puede usarlo solo requirepara documentos JSON válidos.

datos.json

{
  "name": "Freddie Mercury"
}

principal.js

var obj = require('data.json');

console.log(obj.name); 
//Freddie Mercury
serkan avatar Mar 31 '2016 07:03 serkan

Dos de las formas más comunes de importar

Primera manera:

let jsonData = require('./JsonFile.json')

let jsonData = require('./JsonFile')// si omitimos .json también funciona

O

import jsonData from ('./JsonFile.json')

Segunda forma:

  1. sincrónicamente

    const fs = require('fs')
    let jsonData = JSON.parse(fs.readFileSync('JsonFile.json', 'utf-8'))
    
  2. asincrónicamente

    const fs = require('fs')
    let jsonData = {}
    fs.readFile('JsonFile.json', 'utf-8', (err, data) => {
      if (err) throw err
    
      jsonData = JSON.parse(data)
    })
    

Nota:

  1. Si se cambia JsonFile.json, no obtenemos los nuevos datos, incluso si volvemos a ejecutarrequire('./JsonFile.json')

  2. El fs.readFileo fs.readFileSyncsiempre volverá a leer el archivo y obtendrá los cambios.

Rajkumar avatar Apr 01 '2019 09:04 Rajkumar

No. Utilice readFileo readFileSync(este último solo en el momento del inicio).

O utilizar una biblioteca existente como

  • cjson

Alternativamente, escriba su configuración en un archivo js en lugar de un archivo json como

module.exports = {
  // json
}
Raynos avatar Aug 23 '2011 15:08 Raynos

Una ingeniosa línea asíncrona sin almacenamiento en caché para módulos del nodo 15:

import { readFile } from 'fs/promises';

const data = await readFile('{{ path }}').then(json => JSON.parse(json)).catch(() => null);
som avatar Jan 07 '2021 01:01 som