JSON en JavaScript
En esta lección
JSON (JavaScript Object Notation) es un formato de texto para guardar e intercambiar datos. Es el idioma en el que se hablan la mayoría de aplicaciones web: cuando tu página pide datos a un servidor, casi siempre le llegan en JSON. También se usa en archivos de configuración, como el package.json.
Nació a partir de la sintaxis de los objetos de JavaScript (de ahí su nombre), pero hoy es un estándar independiente: lo leen y escriben Python, Java, PHP, bases de datos y prácticamente cualquier lenguaje. Sustituyó en gran parte a XML porque es más ligero y fácil de leer.
Cómo es un JSON
{
"nombre": "Marta",
"edad": 21,
"cursos": ["HTML", "CSS", "JavaScript"],
"beca": null,
"activo": true,
"direccion": {
"ciudad": "Santander",
"cp": "39001"
}
}
Un valor JSON puede ser:
- Un objeto: pares
"clave": valorentre llaves, separados por comas. - Un array: valores entre corchetes, separados por comas.
- Un texto, entre comillas dobles.
- Un número:
42,-3.5,1.2e-5. true,falseonull.
Reglas estrictas
JSON se parece mucho a un objeto de JavaScript, pero es más estricto:
| Objeto de JavaScript | JSON | |
|---|---|---|
| Claves | Con o sin comillas | Siempre entre comillas dobles |
| Textos | Comillas simples, dobles o invertidas | Solo comillas dobles |
| Coma después del último elemento | Permitida | Prohibida |
| Comentarios | Sí | No |
undefined, funciones, fechas | Sí | No existen |
Ejemplos no válidos:
{nombre: "Ana"} ← la clave no tiene comillas
{'nombre': 'Ana'} ← comillas simples
{"a": 1, "b": 2,} ← coma final
{"hola, mundo"} ← un objeto necesita pares clave: valor
{1: "uno"} ← las claves deben ser textos
True ← es true, en minúsculas
De objeto a texto: JSON.stringify
const producto = { nombre: "Taza", precio: 8.5, etiquetas: ["regalo"] };
const texto = JSON.stringify(producto);
// '{"nombre":"Taza","precio":8.5,"etiquetas":["regalo"]}'
typeof texto // "string"
Para que sea legible (con saltos de línea y sangría), pasa un tercer argumento con el número de espacios:
JSON.stringify(producto, null, 2);
Qué pasa con los valores que JSON no admite:
JSON.stringify({ a: undefined, b: () => 1, c: new Date(2026, 0, 1) });
// '{"c":"2025-12-31T23:00:00.000Z"}'
Las propiedades con undefined y con funciones desaparecen, y las fechas se convierten en texto en hora UTC (por eso la medianoche del 1 de enero en España aparece como las 23:00 del día anterior). Al leerlas de vuelta, tendrás que volver a crear el Date: new Date(objeto.c).
De texto a objeto: JSON.parse
const texto = '{"nombre":"redes","curso":1,"horario":["L15","X17"]}';
const asignatura = JSON.parse(texto);
asignatura.horario[0] // "L15"
Si el texto no es un JSON válido, JSON.parse lanza un SyntaxError. Cuando el texto viene de fuera (un servidor, un archivo, localStorage), envuélvelo en un try...catch:
function leerJson(texto, valorPorDefecto) {
try {
return JSON.parse(texto);
} catch {
return valorPorDefecto;
}
}
Usos habituales
- Recibir datos de un servidor:
const datos = await respuesta.json();(lo verás en la lección de fetch). - Enviar datos a un servidor:
body: JSON.stringify(datos). - Guardar objetos en el navegador:
localStoragesolo guarda texto, así que se usaJSON.stringifyal guardar yJSON.parseal leer. Lo verás en Web Storage. - Copiar un objeto (sin funciones ni fechas):
JSON.parse(JSON.stringify(obj)). Hoy existe una forma mejor:structuredClone(obj).
Herramientas
- Para comprobar si un JSON es válido y verlo bonito, pega el texto en un validador online como jsonlint.com.
- Firefox y Chrome muestran los archivos
.jsonformateados y plegables si los abres directamente. - En VS Code, el formateador (Mayús + Alt + F) ordena un JSON al momento.
Pruébalo tú
Cambia el código y pulsa Ejecutar (o Ctrl + Enter).
Pon a prueba lo que has aprendido
¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.