JSON en Node.js: Guía Completa para el Procesamiento de Datos
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, archivos de configuración y almacenamiento de información estructurada. En el entorno de Node.js, trabajar con JSON es una parte integral de prácticamente cualquier aplicación. En este artículo, analizaremos en detalle todos los aspectos del procesamiento de JSON: desde el análisis básico hasta el procesamiento avanzado por flujos.
1. Fundamentos: Análisis y Serialización
En Node.js, se utilizan dos métodos globales para trabajar con JSON: JSON.parse() y JSON.stringify(). Están disponibles sin necesidad de importar módulos adicionales.
JSON.parse() — Conversión de cadena a objeto
El método JSON.parse() toma una cadena JSON y devuelve el objeto JavaScript correspondiente. Es importante que la cadena sea estrictamente un JSON válido.
const jsonString = '{"name": "Alice", "age": 30, "isAdmin": false}';const user = JSON.parse(jsonString);console.log(user.name); // Aliceconsole.log(typeof user); // objectEl método también admite un segundo argumento: una función "reviver" que permite transformar los valores durante el análisis:
const data = '{"date": "2025-01-15T10:00:00Z"}';const parsed = JSON.parse(data, (key, value) => { if (key === 'date') return new Date(value); return value;});console.log(parsed.date instanceof Date); // trueJSON.stringify() — Conversión de objeto a cadena
El método JSON.stringify() realiza la conversión inversa: transforma un objeto JavaScript en una cadena JSON.
const user = { name: 'Bob', age: 25, hobbies: ['coding', 'reading']};const json = JSON.stringify(user);console.log(json); // {"name":"Bob","age":25,"hobbies":["coding","reading"]}El método acepta tres argumentos: el valor, una función de reemplazo (replacer) y la cantidad de espacios para el formato (space):
const obj = { a: 1, b: 2, c: 3 };// Salida formateada con sangríaconsole.log(JSON.stringify(obj, null, 2));// {// "a": 1,// "b": 2,// "c": 3// }
// Filtrado de claves con replacerconst filtered = JSON.stringify(obj, ['a', 'c'], 2);console.log(filtered);// {// "a": 1,// "c": 3// }2. Lectura y Escritura de Archivos JSON
En aplicaciones reales, los datos JSON a menudo se almacenan en archivos. Para trabajar con el sistema de archivos se utiliza el módulo incorporado fs.
Lectura y escritura síncronas
const fs = require('fs');const path = require('path');
const filePath = path.join(__dirname, 'config.json');
// Lecturaconst rawData = fs.readFileSync(filePath, 'utf-8');const config = JSON.parse(rawData);console.log(config.port);
// Escrituraconst newConfig = { port: 3000, host: 'localhost' };fs.writeFileSync(filePath, JSON.stringify(newConfig, null, 2));Lectura y escritura asíncronas (método recomendado)
const fs = require('fs').promises;
async function readConfig() { try { const data = await fs.readFile('config.json', 'utf-8'); return JSON.parse(data); } catch (err) { console.error('Error al leer el archivo:', err); throw err; }}
async function writeConfig(config) { await fs.writeFile('config.json', JSON.stringify(config, null, 2));}
// Uso(async () => { const config = await readConfig(); config.port = 4000; await writeConfig(config);})();3. Validación de JSON
A veces es necesario verificar si una cadena es un JSON válido sin lanzar una excepción. La forma más confiable es envolver JSON.parse() en un bloque try-catch:
También en la biblioteca
Cliente HTTP para Rust: revisión de las mejores bibliotecas (reqwest, ureq, hyper)
Aprendizaje automático en Java: revisión de las bibliotecas clave
Event Bus y el patrón Observer en C++: implementación y ejemplos
Trabajo con Excel en Swift en iOS y macOS: bibliotecas y ejemplos
Validación de datos en Go: revisión de bibliotecas y enfoques
Recommendations