1. Qué es JSON y por qué se convirtió en el estándar de la industria
JSON (JavaScript Object Notation) es el estándar universal para el intercambio de datos estructurados entre servidores web, aplicaciones móviles, bases de datos y modernos agentes de inteligencia artificial.
Cuando los sistemas de software se comunican entre sí, intercambiar texto plano sin formato resulta frágil e ineficiente:
"Elena Kovalchuk, 29 años, Kiev, suscripción premium activa, habilidades: Python, SQL."
Aunque un ser humano puede interpretar esa frase sin esfuerzo, un algoritmo requeriría una compleja lógica heurística para extraer cada entidad. En JSON, la misma información se expresa de forma determinista y estructurada:
Cualquier parser en cualquier lenguaje moderno (JavaScript, Python, Go, Rust) puede acceder de inmediato a la clave "city" y obtener "Kiev" sin ambigüedades.
Por qué JSON es independiente del lenguaje
A pesar de incluir "JavaScript" en su nombre, JSON es un formato de texto completamente independiente del lenguaje de programación, formalizado en el estándar RFC 8259. Funciona como el medio de comunicación estándar entre sistemas operativos y microservicios mediante el tipo MIME application/json.
2. Anatomía de JSON: objetos, arrays y tipos de datos primitivos
Todo documento JSON está compuesto por dos estructuras contenedoras (objetos y arrays) y seis tipos de datos fundamentales.
Objeto (JSON Object)
Un objeto es una colección no ordenada de pares clave: valor delimitada por llaves {}. Las claves deben ser siempre cadenas entre comillas dobles.
Diagrama de sintaxis para objetos JSONArray (JSON Array)
Un array es una lista ordenada de valores delimitada por corchetes []. Los elementos están indexados desde cero y pueden contener cualquier tipo de dato válido en JSON.
Diagrama de sintaxis para arrays JSONTipos de valores permitidos
La especificación de JSON admite estrictamente seis tipos de valores primitivos y estructurados:
Tipos de valores permitidos en la especificación JSON| Tipo de valor | Reglas de sintaxis y descripción | Ejemplo |
|---|---|---|
| String | Secuencia de caracteres Unicode delimitada por comillas dobles | "¡Hola, Mundo!" |
| Number | Entero o decimal en coma flotante (sin notación hexadecimal ni puntos finales) | 42, -12.5, 1.5e3 |
| Boolean | Valor literal en minúsculas: true o false | true, false |
| Null | Literal que representa la ausencia intencional de valor | null |
| Object | Contenedor anidado de pares clave-valor | {"nested": true} |
| Array | Lista ordenada anidada de valores | [1, 2, 3] |
3. Reglas estrictas de sintaxis y errores comunes
La sintaxis de JSON es significativamente más estricta que la de JavaScript o Python. Una coma mal ubicada o unas comillas simples invalidan por completo todo el documento.
Cinco reglas fundamentales de sintaxis
- Exclusividad de comillas dobles: Tanto las claves como los valores de texto deben usar comillas dobles (
"texto"). El uso de comillas simples ('texto') genera un error de análisis sintáctico irrecuperable. - Prohibición de comas finales (trailing commas): Colocar una coma tras el último elemento de un objeto o array es un error de sintaxis estricto.
- Dos puntos para delimitación: El carácter de dos puntos
:es el único separador válido entre una clave y su valor. - Cero comentarios permitidos: JSON no admite comentarios
//ni/* */. Cualquier metadato explicativo debe agregarse como una propiedad normal (por ejemplo,"_comment": "Nota explicativa"). - Tipos no serializables en tiempo de ejecución: JSON no puede representar directamente
undefined,NaN,Infinity, funciones ni instancias deDate.
Comparativa: JSON válido vs. JSON inválido
4. Diferencias clave entre JSON y objetos de JavaScript
Es común confundir los objetos literales de JavaScript con JSON. Sin embargo, en la arquitectura de ejecución representan conceptos totalmente diferentes.
Matriz de diferencias técnicas
| Característica | Objeto Literal en JavaScript | Especificación JSON |
|---|---|---|
| Naturaleza | Estructura de datos dinámica en memoria | Cadena de texto serializada |
| Restricciones de claves | Identificadores sin comillas, cadenas o Symbols | Exclusivamente cadenas entre comillas dobles |
| Tipos soportados | Funciones, Date, Map, Set, undefined, etc. | Exactamente 6 tipos (string, number, bool, null, obj, arr) |
| Comentarios | Totalmente permitidos (// y /* */) | Prohibidos |
| Comas finales | Permitidas en ECMAScript moderno | Prohibidas |
5. Navegación y consulta de estructuras de datos anidadas
En escenarios reales, las respuestas de las APIs presentan jerarquías profundas. El acceso a los valores requiere el uso de la notación de punto para objetos y corchetes con índice ([]) para arrays.
Ejemplo de estructura anidada
Rutas de acceso a los datos
order.orderId$\rightarrow$ evalúa a"ORD-94821"order.customer.fullName$\rightarrow$ evalúa a"Taras Shevchenko"order.customer.contacts.phones[0]$\rightarrow$ evalúa a"+380501112233"order.items[1].price$\rightarrow$ evalúa a120
En JavaScript y TypeScript moderno, utiliza siempre encadenamiento opcional (optional chaining) como order?.customer?.contacts?.email para evitar errores del tipo TypeError: Cannot read properties of undefined.
6. JSON en APIs REST: peticiones, respuestas y encabezados
La inmensa mayoría de los servicios web actuales utilizan JSON como formato de transporte de datos sobre el protocolo HTTP.
Encabezados HTTP indispensables
Content-Type: application/json: Notifica al servidor o cliente que el cuerpo de la petición o respuesta contiene una carga útil en formato JSON serializado.Accept: application/json: Informa al backend de que el cliente espera recibir la respuesta estrictamente en formato JSON (y no en XML o HTML).
7. Serialización y deserialización: parse y stringify
Convertir un objeto en memoria a una cadena de texto se denomina Serialización, mientras que reconstruir un objeto a partir de una cadena de texto es la Deserialización.
8. Diagnóstico de errores de sintaxis y validación
Cuando el texto de entrada contiene errores de sintaxis, la llamada a JSON.parse() lanza una excepción no controlada SyntaxError que puede interrumpir el flujo de ejecución si no se captura de forma segura.
Lista rápida de diagnóstico
- ¿Están todas las llaves y corchetes abiertos correctamente cerrados con sus correspondientes
}y]? - ¿Están todas las claves y cadenas de texto delimitadas por comillas dobles
""? - ¿Se eliminaron todas las comas finales antes de los cierres
}o]? - ¿Se excluyeron valores incompatibles (
undefined,NaN, comentarios)? - ¿Están correctamente escapadas las comillas dobles internas:
"cita": "Palabra entre \"comillas\""?
9. JSON Schema: cumplimiento de contratos y validación de datos
Un documento puede ser sintácticamente válido en JSON y, al mismo tiempo, incumplir los requisitos del dominio de la aplicación (por ejemplo, recibir una edad con valor "veinte" en vez de un número entero).
JSON Schema es el estándar internacional para describir y validar la estructura de los datos en JSON.
Bibliotecas de validación como Ajv en Node.js o jsonschema en Python verifican automáticamente las cargas útiles contra este esquema antes de transferirlas a la lógica de negocio.
10. Salidas estructuradas para LLMs, llamadas a funciones y agentes de IA
En el desarrollo de agentes autónomos, las respuestas en texto no estructurado están siendo sustituidas por Salidas Estructuradas (Structured Outputs).
Los agentes de IA (como Claude Code, OpenAI Function Calling o LangChain) se comunican con herramientas externas mediante parámetros expresados en JSON:
Buenas prácticas para exigir JSON a modelos de lenguaje
- Definir esquemas explícitos: Proporciona una interfaz de TypeScript o un JSON Schema estricto en el prompt del sistema.
- Exigir salida limpia: Indica al modelo: "Devuelve ÚNICAMENTE un objeto JSON válido y sin bloques markdown ni comentarios explicativos adicionales."
- Aprovechar modos estructurados nativos: Utiliza las funcionalidades a nivel de API del proveedor (como Anthropic Tool Use u OpenAI Structured Outputs) para forzar gramáticas estrictas por tokens.
11. Comparación de formatos: JSON vs. YAML vs. XML vs. TOML
| Formato | Legibilidad humana | Soporte de comentarios | Sobrecarga sintáctica | Caso de uso principal en la industria |
|---|---|---|---|---|
| JSON | Media / Alta | No | Mínima | APIs web, transporte cliente-servidor, tool calling en IA |
| YAML | Muy alta | Sí | Nula (basado en indentación) | Pipelines CI/CD (GitHub Actions, manifiestos de Kubernetes) |
| TOML | Muy alta | Sí | Baja | Configuración de aplicaciones (Cargo, pyproject.toml) |
| XML | Baja | Sí | Alta (etiquetas verbosas) | Servicios empresariales heredados, SOAP, gráficos SVG |
12. Taller práctico, autoevaluación y lista de verificación final
Consolida lo aprendido revisando un ciclo completo de consulta, parseo y lectura de datos desde una API.
Flujo integral de consulta y consumo de datos
Preguntas de repaso
1. ¿Qué error se produce al usar comillas simples para delimitar cadenas en un archivo JSON?
Respuesta: Se produce un error de análisis (
SyntaxError: Unexpected token ' in JSON). La especificación oficial de JSON exige estrictamente comillas dobles"".
2. ¿Por qué están prohibidas las comas finales tras el último elemento de un objeto o array?
Respuesta: La especificación RFC 8259 lo prohíbe taxativamente. El parser espera encontrar otro elemento tras una coma; al toparse inmediatamente con una llave o corchete de cierre (
}o]), falla.
3. ¿Qué función cumple JSON Schema en arquitecturas de servicios distribuidos?
Respuesta: Garantiza el cumplimiento de contratos de datos y tipos a nivel de negocio (campos obligatorios, rangos numéricos, formatos de email), asegurando que la carga sea no solo válida sintácticamente, sino también coherente con las reglas del sistema.
Lista de verificación para producción
- Todas las claves y valores de texto están delimitados por comillas dobles
"". - Se comprobó que no existen comas finales antes de un cierre
}o]. - Se eliminaron todos los comentarios del documento.
- Se configuraron los encabezados
Content-Type: application/jsonyAccept: application/json. - Se protegieron las invocaciones a
JSON.parse()mediante bloques defensivostry/catch. - Se aplicaron contratos de validación mediante
JSON Schemapara cargas críticas en APIs y agentes de IA.