Saltar al contenido principal

Qué es JSON

JSON (JavaScript Object Notation) es un formato de texto para datos estructurados, definido en RFC 8259. Representa objetos como pares clave/valor y listas como arrays, usando seis caracteres de puntuación y un sistema de tipos estricto. Todas las APIs web, las herramientas de configuración y las bases de datos actuales saben leerlo — y es deliberadamente tan simple que se aprende en una tarde.

Solo local

Qué es JSON: explicación

JSON es el formato en el que llegan los datos. Cuando una app del tiempo muestra el pronóstico de mañana, una hoja de cálculo exporta registros o un archivo de configuración acompaña a un servicio, el texto que se mueve entre esos sistemas es casi siempre JSON: llaves sosteniendo claves y valores, corchetes sosteniendo listas y un pequeño conjunto de reglas sobre cadenas y números en el que todos los lenguajes de programación están de acuerdo.

Se extrajo de la sintaxis de literales de objeto de JavaScript hacia 2001 y se estandarizó primero como RFC 4627, luego revisado como RFC 8259, la versión vigente hoy junto al estándar idéntico ECMA-404. El nombre aún dice JavaScript, pero el formato es neutral al lenguaje por diseño — Python, Java, Go, C#, SQL y tu editor de texto lo hablan con fluidez, que es justamente por lo que se convirtió en la forma por defecto de intercambiar datos entre programas.

Esta guía explica de qué está hecho JSON en realidad — sus seis tipos de datos, sus dos contenedores, sus reglas de escape — con ejemplos copiables para cada uno. Donde una explicación conduce a un siguiente paso práctico, la herramienta enlazada se ejecuta en tu navegador: puedes dar formato, validar o convertir el mismo ejemplo que acabas de leer sin instalar nada.

La forma más rápida de interiorizar las reglas de sintaxis de abajo es romperlas a propósito y ver cómo reacciona un parser — el formateador de JSON te mostrará la línea y la columna exactas de cada error.

Cuando quieras todas las reglas en una sola página de referencia, la la chuleta de sintaxis JSON comprime esta guía en una tabla de consulta.

Los dos contenedores: objetos y arrays

Todo en JSON se construye a partir de dos estructuras. Un objeto es un conjunto sin orden de pares clave/valor envueltos en llaves — las claves son siempre cadenas, los valores pueden ser cualquier valor JSON y los pares se separan con comas. Un array es una lista ordenada de valores envuelta en corchetes, y sus valores pueden ser de cualquier mezcla de tipos.

Un objeto (pares clave/valor)

{
  "name": "Ada Lovelace",
  "born": 1815,
  "mathematician": true
}

Un array (valores ordenados)

[
  "analytical engine",
  1843,
  null
]

Los seis tipos de datos

Cuatro son escalares — string, number, boolean y null — y dos son los contenedores de arriba. Las reglas que sorprenden a quien llega son pocas pero estrictas: las cadenas van siempre entre comillas dobles (las comillas simples no son válidas), los números no llevan comillas y no se pueden escribir en hexadecimal, los booleanos son exactamente los tokens en minúscula true y false, y null es un valor en sí mismo que significa vacío a propósito.

TipoEjemplosRegla que conviene recordar
string"hello", "café", "é"Solo comillas dobles; escapa " y \ dentro
number42, -3.14, 2.1e10Sin hexadecimal, sin NaN, sin ceros a la izquierda
booleantrue, falseSolo en minúscula — True no es válido
nullnullSignifica vacío intencionado, no cero
object{"key": "value"}Las claves son cadenas; las comas finales están prohibidas
array[1, "two", null]El orden se conserva; se permiten mezclas

Escapes: qué puede vivir dentro de una cadena

Dentro de una cadena, hay dos caracteres que deben escaparse dondequiera que aparezcan: las comillas dobles (como \") y la barra invertida (como \\). Existen seis escapes más para caracteres de control — \n salto de línea, \t tabulador, \r retorno de carro, \b retroceso, \f salto de página, y \/ para la barra diagonal, que es legal pero opcional. Cualquier otro carácter puede aparecer literalmente como UTF-8, o como un escape \uXXXX de su punto de código Unicode — ambas formas significan exactamente la misma cadena para un parser.

Forma escapada

"path": "C:\\Users\\ada"
"quote": "she said \"hi\""
"emoji": "\ud83d\ude00"

Lo que entrega un parser

path:   C:\Users\ada
quote:  she said "hi"
emoji:  😀

Espacios en blanco, formato y por qué existe el formateo

Entre la puntuación estructural, JSON permite exactamente cuatro caracteres de espacio en blanco: espacio, tabulador, salto de línea y retorno de carro. Esa permisividad es la que hace posible dar formato — el mismo documento puede ser una línea ilegible en el cable y un árbol indentado en tu editor, y ambos son byte a byte los mismos datos para un parser. Dar formato no cambia nada del significado, y por eso la herramienta formateadora es segura de ejecutar sobre cualquier payload y el JSON minificado es la elección estándar para el transporte.

  • Sin comentarios: RFC 8259 eliminó los comentarios a propósito, tras divergencias reales entre parsers. JSONC es la extensión no oficial que algunas herramientas aceptan.
  • Sin comas finales: [1, 2, 3,] no es válido, por amigable que parezca.
  • Claves duplicadas: los parsers se quedan con la primera o con la última — RFC 8259 lo deja en manos de las implementaciones, y por eso los duplicados son un fallo incluso donde parsean.
  • Cualquier nivel superior: cualquier valor puede ser un documento entero — un array de números es JSON completo.

Dónde se usa JSON — y dónde no

JSON domina tres territorios: los cuerpos de peticiones y respuestas de APIs, la configuración estructurada donde no se echan de menos los comentarios y los datos en reposo en bases de datos documentales. Comparte el cable a regañadientes con dos vecinos — los formatos binarios como protobuf, que ganan en tamaño y velocidad cuando ambos extremos comparten un esquema, y YAML, que gana en editabilidad a mano para la configuración de ops. Entender JSON a fondo no es, por tanto, una habilidad entre muchas; es el prerrequisito para leer a esos dos vecinos, porque YAML 1.2 parsea JSON y la mayoría de los esquemas binarios se documentan con ejemplos JSON.

Preguntas frecuentes

¿Qué significa JSON?

JavaScript Object Notation. La sintaxis se extrajo de los literales de objeto de JavaScript por Douglas Crockford hacia 2001, pero el formato en sí es neutral al lenguaje: RFC 8259 lo define como un formato de texto que cualquier lenguaje de programación puede emitir y parsear, y por eso se convirtió en el formato de intercambio universal en lugar de una característica de JavaScript.

¿Es JSON un lenguaje de programación?

No — es un formato de datos sin semántica de ejecución. No puede expresar lógica, variables ni funciones, solo estructura: objetos, arrays y cuatro tipos escalares. La estrictez es deliberada; la gramática de RFC 8259 cabe en aproximadamente una página, y esa es la propiedad que permitió que cada lenguaje lo implementara de forma idéntica.

¿Cuál es la diferencia entre JSON y los objetos de JavaScript?

Tres diferencias visibles: JSON exige claves entre comillas dobles, prohíbe las comas finales y no tiene undefined, funciones ni comentarios. Un literal de objeto de JavaScript como {name: 'ada'} no es JSON válido — {"name":"ada"} sí. A la inversa, todo documento JSON válido parsea como un objeto de JavaScript, y por eso se confunden tanto.

¿Por qué JSON no permite comentarios?

Douglas Crockford los eliminó a propósito: en las primeras negociaciones del formato se vio a proveedores metiendo directivas de parseo en los comentarios, lo que rompía la interoperabilidad. Si necesitas anotar, la convención es una clave hermana como "//" o "_comment", o JSONC donde la cadena de herramientas lo soporte — pero el JSON de transporte se queda sin comentarios por diseño.

¿Cómo compruebo si mi JSON es válido?

Pégalo en un validador — el validador de JSON de este sitio parsea según RFC 8259 localmente e informa de la línea y la columna exactas del primer error de sintaxis, en tu navegador. Los fallos habituales son las comillas simples, las comas finales, las claves sin comillas y las comillas tipográficas pegadas desde un procesador de textos.

¿Es seguro parsear JSON?

Parsear texto JSON es seguro; lo que un parser te entrega puede seguir siendo peligroso si lo ejecutas. Dos trampas clásicas: usar el eval de JavaScript en lugar de JSON.parse (eval ejecuta código) y la expansión de entidades sin límite en herramientas influidas por XML. Un parser conforme a los estándares, como los de los navegadores, tiene límites de profundidad y tamaño y nunca ejecuta nada.

¿Dónde puedo leer las normas citadas aquí?

  • RFC 8259 — El formato de intercambio de datos JavaScript Object Notation (JSON)
  • RFC 4627 — El tipo de medio application/json para JavaScript Object Notation (JSON) (obsoleto; el estándar vigente de JSON es RFC 8259)
  • ECMA-404 — La sintaxis de intercambio de datos JSON
  • YAML 1.2 — Especificación de YAML, versión 1.2 (revisión 1.2.2)