JSON es un formato de datos muy común, por lo que es importante aprender todo sobre estas operaciones comunes.

Es posible leer y escribir archivos JSON en Node.js. Todo lo que necesita hacer es utilizar el módulo fs como se detalla en nuestra guía fácil de seguir.

Lectura y escritura de archivos JSON en Node.js

El formato de notación de objetos JavaScript, conocido popularmente como JSON, es un formato ligero de transferencia de datos ampliamente utilizado para representar datos estructurados. Es un formato basado en texto que es fácil de leer y escribir para los humanos y para las máquinas de analizar y generar.

La capacidad de leer y escribir archivos JSON mediante programación en Node.js le permite almacenar, intercambiar y manipular datos estructurados de manera eficiente y sencilla. Aprenda a leer, escribir y actualizar archivos JSON utilizando el módulo del sistema de archivos Node.js.

El módulo del sistema de archivos Node.js

El sistema de archivos Node.js (fs) está integrado en Node.js. Le permite interactuar con el sistema de archivos de su dispositivo. Puede usarlo para leer el contenido de un archivo, crear un archivo nuevo y eliminar un archivo, entre otras cosas.

instagram viewer

Los métodos proporcionados por el fs El módulo puede ser sincrónico o asincrónico. Los métodos sincrónicos bloquean la ejecución de su programa hasta que se completa la operación del sistema de archivos. Estos métodos suelen tener "Sync" al final de sus nombres. Por ejemplo, leerFileSync o escribirFileSync.

Por otro lado, los métodos asincrónicos no bloquean la ejecución de su programa y le permiten continuar procesando otras tareas mientras se realiza la operación del sistema de archivos. Estos métodos aceptan una función de devolución de llamada que se ejecutará cuando se complete la operación. Por ejemplo, leer archivo o escribir archivo.

Al interactuar con el sistema de archivos, siempre debe utilizar métodos asincrónicos para mantener la naturaleza sin bloqueo del bucle de eventos y mejorar el rendimiento y la capacidad de respuesta de su aplicación.

Sin embargo, los métodos sincrónicos tienen su lugar en ciertos escenarios, especialmente cuando se escriben scripts simples o se manejan operaciones de archivos únicas.

Lectura de archivos JSON con el módulo fs

Para leer un archivo JSON, primero importe el archivo asíncrono fs módulo en su archivo principal. Al igual que:

const fs = require("node: fs/promises");

Si está utilizando una versión inferior a Nodo.js v18, importar el fs módulo como este:

const fs = require("fs/promises");

Si desea importar el módulo completo (síncrono y asíncrono), elimine el /promises.

Puede leer un archivo JSON usando el leer archivo método que toma dos argumentos: una ruta de archivo y un objeto de configuración opcional. El argumento de configuración especifica opciones para leer el archivo y puede ser un objeto con opciones o una codificación de cadena.

Las opciones de objetos incluyen:

  • codificación (cadena, el valor predeterminado es "utf8"): esta opción especifica la codificación de caracteres que se utilizará al leer el archivo. Las codificaciones comunes incluyen "utf8" para archivos de texto y "binary" para archivos binarios.
  • bandera (cadena, el valor predeterminado es "r"): esta opción especifica el indicador del sistema de archivos utilizado al abrir el archivo. Los indicadores comunes incluyen "r" para lectura y "w" para escritura.

Por ejemplo:

fs.readFile("./users.json", { encoding: "utf-8", flag: "r" })
.then((data) => {
const users = JSON.parse(data);
console.log(users);
})
.catch((error) => {
console.error('Error reading the JSON file:', error);
});

Este código lee un archivo JSON llamado usuarios.json en el directorio actual. Cuando recupera los datos del archivo, puede analizarlos desde JSON en un objeto JavaScript usando JSON.parse. Esto le permite acceder y manipular los datos como un objeto en su código.

Para archivos JSON pequeños, puede utilizar requerir para leerlos sincrónicamente. Este método analiza automáticamente archivos JSON en objetos JavaScript. Para archivos JSON más grandes y en escenarios sin bloqueo, use fs.readArchivo para leerlos de forma asincrónica. Además, utilizando requerir también almacena en caché el contenido del archivo en la memoria, por lo que puede que no sea ideal si su archivo JSON cambia mucho.

Escribir archivos JSON con el módulo fs

Puede escribir datos en archivos JSON usando el escribir archivo método. Este método toma tres argumentos:

  • Una ruta de archivo.
  • Los datos que desea escribir en el archivo, que pueden ser una cadena, un búfer, un AsíncronoIterable, o un objeto iterable.
  • Un objeto de configuración opcional.

Este método escribe datos de forma asincrónica en un archivo. Si el archivo existe, sobrescribe el contenido existente con el contenido nuevo. Si el archivo no existe, lo crea y lo completa con los datos que usted pasa como argumento.

Por ejemplo:

const fakeUsers = [
{
id: 1,
name: "John Doe",
username: "johndoe123",
address: {
street: "123 Main St",
city: "Anytown",
},
},
{
id: 2,
name: "Jane Smith",
username: "janesmith456",
address: {
street: "456 Elm St",
city: "Another City",
},
}
];

fs.writeFile("./users.json", JSON.stringify(fakeUsers), {
encoding: "utf-8",
flag: "w",
}).catch((error) => {
console.error('Error writing the JSON file:', error);
});

Los datos que pasa a la función writeFile tienen que ser una cadena o un búfer, por lo que si desea escribir un objeto en el archivo, primero debe convertirlo en una cadena usando el JSON.stringify método.

Actualización de archivos JSON con el módulo fs

El fs El módulo no proporciona una forma explícita de actualizar archivos, ya que escribir un archivo sobrescribe cualquier dato existente.

Para solucionar este problema, puede actualizar un archivo obteniendo primero el contenido existente del archivo usando el leer archivo método. Luego, puede agregar los datos existentes a sus datos actuales y pasarlos como su argumento de datos en el escribir archivo método.

Aquí hay una función que implementa la lógica anterior:

const updateFile = async (filePath, data) => {
try {
const fileContents = await fs.readFile(filePath, {
encoding: "utf-8",
flag: "r",
});

const fileData = JSON.parse(fileContents);

const updatedFileData = [...fileData, ...data];

await fs.writeFile(filePath, JSON.stringify(updatedFileData), {
encoding: "utf-8",
flag: "w",
});

return"File updated successfully";
} catch (error) {
console.error('Error updating the JSON file:', error);
}
};

Puedes llamar a la función así:

updateFile("./users.json", [
{
id: 4,
name: "Jane Doe",
username: "janedoe123",
address: {
street: "123 Main St",
city: "Anytown",
},
},
{
id: 5,
name: "John Smith",
username: "johnsmith456",
address: {
street: "456 Elm St",
city: "Another City",
},
}
]).then((message) => {
console.log(message);
});

Este bloque de código agregará los usuarios con la información anterior al existente usuarios.json archivo.

Consideraciones de seguridad para leer y escribir archivos JSON

Proteger su aplicación Node.js al leer y escribir archivos JSON implica consideraciones de seguridad cruciales. Siempre debe validar los datos JSON para asegurarse de que se ajusten a sus expectativas. También debe restringir los permisos de acceso a archivos y desinfectar la entrada del usuario para frustrar posibles vulnerabilidades como la inyección de código.