Trabajo con JSON en Node.js: desde lo básico hasta técnicas avanzadas
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar de facto para APIs web y archivos de configuración. En Node.js, el trabajo con JSON está integrado a nivel de núcleo, lo que hace que su procesamiento sea rápido y conveniente. En este artículo, analizaremos todos los aspectos del trabajo con JSON: desde el análisis básico hasta el procesamiento de archivos grandes mediante flujos.
Fundamentos: JSON.parse() y JSON.stringify()
Dos métodos globales — JSON.parse() y JSON.stringify() — son la base de todo el trabajo con JSON en JavaScript.
JSON.parse() — conversión de cadena a objeto
El método JSON.parse() toma una cadena en formato JSON y devuelve el objeto JavaScript correspondiente. Si la cadena contiene un error de sintaxis, se lanzará una excepción SyntaxError.
const jsonString = '{"name": "Ana", "age": 30, "isAdmin": false}';const user = JSON.parse(jsonString);
console.log(user.name); // "Ana"console.log(user.age); // 30El segundo parámetro opcional es una función reviver, que permite transformar valores durante el análisis:
const jsonString = '{"date": "2024-01-15T10:30:00Z", "count": "42"}';const obj = JSON.parse(jsonString, (key, value) => { if (key === 'date') return new Date(value); if (key === 'count') return parseInt(value, 10); return value;});
console.log(obj.date instanceof Date); // trueconsole.log(typeof obj.count); // "number"JSON.stringify() — conversión de objeto a cadena
El método JSON.stringify() hace lo contrario: convierte un objeto JavaScript en una cadena JSON. Acepta tres parámetros: el valor, una función de reemplazo (o un array de claves) y la cantidad de espacios para el formato.
const user = { name: "Iván", age: 25, roles: ["admin", "editor"], metadata: null};
// Uso básicoconst json = JSON.stringify(user);console.log(json);// {"name":"Iván","age":25,"roles":["admin","editor"],"metadata":null}
// Con formatoconst prettyJson = JSON.stringify(user, null, 2);console.log(prettyJson);/*{ "name": "Iván", "age": 25, "roles": ["admin", "editor"], "metadata": null}*/La función de reemplazo permite filtrar o transformar valores:
const user = { name: "Pedro", password: "secret123", age: 28 };
const safeJson = JSON.stringify(user, (key, value) => { if (key === 'password') return undefined; // eliminar contraseña return value;});
console.log(safeJson); // {"name":"Pedro","age":28}Lectura y escritura de archivos JSON en Node.js
En proyectos reales, los datos JSON a menudo se almacenan en archivos. Node.js proporciona el módulo fs (file system) para trabajar con el sistema de archivos.
Lectura de JSON desde un archivo
const fs = require('fs');
// Lectura síncronatry { const data = fs.readFileSync('config.json', 'utf8'); const config = JSON.parse(data); console.log(config.port); // 3000} catch (err) { console.error('Error al leer el archivo:', err.message);}
// Lectura asíncrona (recomendada)fs.readFile('config.json', 'utf8', (err, data) => { if (err) { console.error('Error:', err); return; } const config = JSON.parse(data); console.log(config);});Escritura de JSON en un archivo
const fs = require('fs');
const settings = { theme: "dark", language: "es", notifications: true};
// Escritura con formatofs.writeFileSync('settings.json', JSON.stringify(settings, null, 2), 'utf8');console.log('Archivo settings.json creado');
// Escritura asíncronafs.writeFile('settings.json', JSON.stringify(settings), (err) => { if (err) throw err; También en la biblioteca
neverthrow para TypeScript: guía completa con ejemplos
AddressSanitizer para C++: guía completa con ejemplos prácticos
Generación de PDF en Java: revisión de las mejores bibliotecas (iText, Apache PDFBox, OpenPDF)