Introducción a JSON y JavaScript
\nJSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar para la comunicación entre cliente y servidor en aplicaciones web. Gracias a su simplicidad y legibilidad, JSON se utiliza en todas partes: desde archivos de configuración hasta solicitudes de API. En este artículo, analizaremos cómo trabajar con JSON en el entorno Node.js, dominaremos el análisis (conversión de cadena a objeto) y la serialización (conversión de objeto a cadena). El material está dirigido a desarrolladores principiantes que ya conocen los fundamentos de JavaScript.
\n\n¿Qué es JSON y para qué sirve?
\nJSON es un formato de texto basado en la sintaxis de objetos de JavaScript. Sin embargo, JSON es simplemente una cadena que se puede transmitir a través de la red o almacenar en un archivo. Los tipos de datos principales en JSON son:
\n- \n
- Cadenas (entre comillas dobles) \n
- Números (enteros y de punto flotante) \n
- Valores booleanos (true/false) \n
- null \n
- Arreglos \n
- Objetos (claves entre comillas dobles) \n
Ejemplo de una cadena JSON válida:
\n{\n "name": "Ana",\n "age": 28,\n "isStudent": false,\n "skills": ["JavaScript", "Node.js"],\n "address": null\n}\nA diferencia de un objeto JavaScript normal, JSON requiere una sintaxis estricta: todas las claves y valores de cadena deben ir entre comillas dobles y los comentarios están prohibidos.
\n\nAnálisis de JSON: JSON.parse()
\nPara convertir una cadena JSON en un objeto JavaScript se utiliza el método JSON.parse(). Esto es necesario cuando se reciben datos del servidor, se lee un archivo o se procesa la entrada del usuario.
Ejemplo básico de análisis
\nconst jsonString = '{"name": "Iván", "age": 30}';\nconst user = JSON.parse(jsonString);\nconsole.log(user.name); // Iván\nconsole.log(user.age); // 30\n\nAnálisis de un arreglo
\nconst jsonArray = '[1, 2, "tres", true]';\nconst arr = JSON.parse(jsonArray);\nconsole.log(arr[2]); // tres\n\nManejo de errores de análisis
\nUn JSON no válido generará una excepción SyntaxError. Siempre use try...catch al trabajar con datos no confiables:
try {\n const invalid = '{"name": "Error}';\n const result = JSON.parse(invalid);\n} catch (error) {\n console.error('Error de análisis:', error.message);\n}\nTambién se puede pasar un segundo argumento: una función reviver que permite transformar valores durante el análisis:
const json = '{"date": "2024-01-15", "count": "42"}';\nconst obj = JSON.parse(json, (key, value) => {\n if (key === 'date') return new Date(value);\n if (key === 'count') return Number(value);\n return value;\n});\nconsole.log(obj.date.getFullYear()); // 2024\nconsole.log(typeof obj.count); // number\n\nSerialización JSON: JSON.stringify()
\nEl proceso inverso (convertir un objeto JavaScript en una cadena JSON) se realiza con JSON.stringify(). Esto es necesario para enviar datos al servidor, guardarlos en un archivo o registrarlos.
Ejemplo simple de serialización
\nconst user = {\n name: 'María',\n age: 25,\n isAdmin: true\n};\nconst json = JSON.stringify(user);\nconsole.log(json);\n// {"name":"María","age":25,"isAdmin":true}\n\nFormato de salida
\nEl método acepta tres parámetros: el valor, una función de reemplazo (o un arreglo de campos) y la cantidad de espacios para la sangría:
\nconst data = {\n id: 1,\n title: 'Artículo',\n tags: ['js', 'json']\n};\n// Con sangría de 2 espacios\nconst prettyJson = JSON.stringify(data, null, 2);\nconsole.log(prettyJson);\n/* Salida:\n{\n "id": 1,\n "title": "Artículo",\n "tags": [\n "js",\n "json"\n ]\n}\n*/\n\nFiltrado de campos
\nEl segundo parámetro puede ser un arreglo de claves que se deben incluir en el resultado:
\nconst user = {\n name: 'Pedro',\n password: 'secret12