JSON (JavaScript Object Notation) es el formato de texto plano que usan la mayoría de las API web, archivos de configuración y exportaciones de datos. Es lo bastante pequeño para aprenderlo en una tarde, pero su rigidez confunde constantemente. Esta guía cubre las reglas, las trampas y las herramientas que lo rodean; cada afirmación se ha ejecutado en Node y Python.
Los seis tipos de valor
| Tipo | Ejemplo | Notas |
|---|---|---|
| Objeto | {"a": 1} |
Pares clave-valor sin orden; las claves son siempre cadenas entre comillas dobles |
| Matriz | [1, 2, 3] |
Lista ordenada de cualquier valor |
| Cadena | "hello" |
Solo comillas dobles; se escapa con barra invertida, \u00e9 para Unicode |
| Número | -12.5e3 |
Sin ceros a la izquierda, sin hex, sin NaN ni Infinity |
| Booleano | true, false |
Solo en minúsculas |
| null | null |
Un "sin valor" explícito |
No existe el tipo fecha: envíe las fechas como cadenas ISO 8601 como 2026-10-03T14:30:05Z. Compárelo con otros formatos en JSON, YAML y XML.
Por qué falla un análisis
JSON es más estricto que la sintaxis de objetos de JavaScript. Todo esto falla al analizarse en Node y en Python:
- una coma final:
{"a":1,} - comillas simples:
{'a':1} - un cero a la izquierda:
{"a":01} - un comentario:
// notaantes de los datos
NaN tampoco es válido según el estándar y Node lo rechaza, pero el módulo json de Python acepta NaN por defecto salvo que se pase allow_nan=False o un gancho parse_constant, de modo que datos que funcionan en un lenguaje pueden fallar en otro. Pegue el texto sospechoso en el Visor JSON o el Editor JSON para ver exactamente dónde se rompe y corríjalo en el Formateador y Embellecedor JSON.
Trampas que parecen JSON válido
- Enteros grandes. JavaScript guarda los números como flotantes de 64 bits, así que
{"id": 9007199254740993}se analiza como9007199254740992en Node (el límite de enteros exactos es 9007199254740991). Python conserva el valor completo. Envíe los identificadores grandes como cadenas. - Claves duplicadas. El estándar las deja sin definir; Node y Python conservan la última, así que
{"a":1,"a":2}queda comoa = 2. - Orden de claves. Los objetos JSON no tienen orden. Node pone primero las claves de tipo entero (
{"b":1,"2":1,"a":1,"1":1}da el orden1, 2, b, a), mientras que Python conserva el de inserción. No dependa nunca de él.
Legible o minificado
Los espacios son opcionales. El mismo objeto pequeño ocupa 53 caracteres con formato y 31 minificado, un 42 % menos; use el Minificador y Compresor JSON para transferir y el formateador para leer. Gzip reduce ambos mucho más.
Consultar con JSONPath
JSONPath direcciona valores dentro de un documento, como XPath hace con XML. Dada una store con tres libros de precios 8,95, 12,99 y 22,99:
| Consulta | Resultado |
|---|---|
$.store.book[*].title |
A, B, C |
$.store.book[0].title |
A |
$.store.book[?(@.price < 10)].title |
A |
$..price |
8.95, 12.99, 22.99 |
$ es la raíz, . entra en una clave, [*] toma todos los elementos, [?()] filtra y .. busca a cualquier profundidad. Pruebe las suyas en el Probador de JSONPath. JSON Schema es el compañero para validar la estructura: por ejemplo {"type": "object", "required": ["id", "name"], "properties": {"id": {"type": "integer"}, "name": {"type": "string"}}} exige un id entero y un name de texto.
Convertir JSON
- A TypeScript:
{"id": 1, "name": "Ada", "tags": ["a", "b"], "address": {"city": "X", "zip": null}}se convierte en
export interface User {
id: number;
name: string;
tags: string[];
address: Address;
}
export interface Address {
city: string;
zip: null;
}
con el JSON a TypeScript.
- A tabla u hoja de cálculo: una matriz de objetos se corresponde de forma natural con filas, con las claves como encabezado. [{"id":1,"name":"Ada"},{"id":2,"name":"Alan"}] como TSV es una línea de encabezado id, tabulador, name seguida de una línea por objeto. Use Conversor de JSON a TSV, Conversor de TSV a JSON, Conversor de JSON a Tabla HTML o Conversor de JSON a Texto; para otros formatos vea Conversor de JSON a XML, Conversor de CSV a TSV, Conversor de TSV a CSV y Conversor de Excel a CSV.
- Comparar dos documentos: el Comparador de Diferencias JSON lista lo añadido, eliminado y cambiado.
- Datos de prueba: el Generador de Datos JSON Falsos crea filas de muestra realistas a partir de una semilla.
Errores frecuentes
- Tratar JSON como JavaScript. No se permiten comillas simples, comentarios ni comas finales.
- Usar números para identificadores. Los ID largos pierden precisión en JavaScript; use cadenas.
- Depender del orden de las claves. Use una matriz cuando importe el orden.
- Construir JSON a mano concatenando cadenas. Use un serializador, que escapa bien las comillas y el Unicode.