Saltar al contenido
json.js · devschool

JSON en JavaScript

Lección 25 de 38 · 3 min de lectura · Actualizado el

En esta lección
  1. Cómo es un JSON
  2. Reglas estrictas
  3. De objeto a texto: JSON.stringify
  4. De texto a objeto: JSON.parse
  5. Usos habituales
  6. Herramientas

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": valor entre 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, false o null.

Reglas estrictas

JSON se parece mucho a un objeto de JavaScript, pero es más estricto:

Objeto de JavaScriptJSON
ClavesCon o sin comillasSiempre entre comillas dobles
TextosComillas simples, dobles o invertidasSolo comillas dobles
Coma después del último elementoPermitidaProhibida
ComentariosSíNo
undefined, funciones, fechasSí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: localStorage solo guarda texto, así que se usa JSON.stringify al guardar y JSON.parse al 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 .json formateados 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).

json.js
Consola

Pon a prueba lo que has aprendido

[JavaScript] ¿Cuál de estos textos es un JSON válido?

[JavaScript] ¿Qué hace JSON.parse con un texto que no es JSON válido?

¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.