¿Existe un requisito para json en node.js?
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 readFileSync
y __dirname
para 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?
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'
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 require
para documentos JSON válidos.
datos.json
{
"name": "Freddie Mercury"
}
principal.js
var obj = require('data.json');
console.log(obj.name);
//Freddie Mercury
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:
sincrónicamente
const fs = require('fs') let jsonData = JSON.parse(fs.readFileSync('JsonFile.json', 'utf-8'))
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:
Si se cambia JsonFile.json, no obtenemos los nuevos datos, incluso si volvemos a ejecutar
require('./JsonFile.json')
El
fs.readFile
ofs.readFileSync
siempre volverá a leer el archivo y obtendrá los cambios.
No. Utilice readFile
o 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
}
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);