JSON (JavaScript Object Notation) se ha consolidado como el lenguaje universal para el intercambio de datos en la web. Prácticamente todas las APIs REST, archivos de configuración y flujos de datos utilizan JSON. A pesar de su aparente sencillez, existen múltiples maneras de estructurar JSON, algunas eficientes y otras no tanto. Esta guía desglosa las prácticas más cruciales en JSON que harán que tus APIs sean más limpias, tu código más mantenible y tus sistemas más eficientes.
1. Adopta Convenciones de Nomenclatura Uniformes
La principal fuente de confusión en las APIs JSON radica en la inconsistencia de los nombres de las claves. Elige una convención y aplícala rigurosamente en toda tu API:
- camelCase (
nombreCompleto,idUsuario) — Es la opción preferida en JavaScript y la mayoría de las APIs web (incluyendo las de Google, Stripe y GitHub). - snake_case (
nombre_completo,id_usuario) — Común en APIs de Python y Ruby, y en sistemas con bases de datos relacionales. - kebab-case (
nombre-completo) — Raramente utilizada en JSON, ya que los guiones requieren que las claves estén entre comillas en JavaScript.
Independientemente de tu elección, la clave es la universalidad. Mezclar id_usuario con userId dentro de la misma API es una de las inconsistencias más frustrantes para quienes consumen tu servicio.
2. Utiliza Siempre Dobles Comillas para Claves y Valores de Texto
La especificación oficial de JSON (RFC 8259) exige que tanto las claves como los valores de tipo cadena de texto estén encerrados entre dobles comillas. Las comillas simples no son válidas en JSON. Este es un error frecuente al migrar literales de objetos de JavaScript a JSON, dado que JavaScript permite el uso de comillas simples.
{'nombre': 'Pan Tool', 'gratis': true}
{"nombre": "Pan Tool", "gratis": true}
3. Emplea los Tipos de Datos Adecuados
JSON soporta seis tipos de datos fundamentales: cadena (string), número (number), booleano (boolean), nulo (null), arreglo (array) y objeto (object). Es vital utilizar el tipo que represente semánticamente el dato; evita convertir todo a cadenas de texto.
- Para valores booleanos, usa booleanos
true/false, no las cadenas"true"/"false"ni los números1/0. - Utiliza null para indicar la ausencia intencionada de un valor. No emplees cadenas vacías
""ni el número0para representar "sin valor". - Para cantidades numéricas, emplea números, no cadenas como
"42". - Los arreglos son ideales para colecciones ordenadas de elementos del mismo tipo.
- Para fechas, utiliza el formato de cadenas ISO 8601:
"2025-04-15T10:30:00Z". JSON no tiene un tipo de dato nativo para fechas.
4. Diseña un Contenedor de Respuesta Coherente
En el contexto de las APIs REST, es fundamental envolver siempre tus respuestas en una estructura de contenedor (envelope) uniforme. Esto simplifica la gestión de errores para los consumidores de la API, haciéndola predecible:
{
"exito": true,
"datos": {
"id": 42,
"nombre": "Pan Tool"
},
"metadatos": {
"total": 1,
"pagina": 1
}
}
// En caso de error:
{
"exito": false,
"error": {
"codigo": "NO_ENCONTRADO",
"mensaje": "El recurso solicitado no pudo ser hallado."
}
}
Un diseño de contenedor consistente permite que los desarrolladores que usan tu API creen una única utilidad de manejo de respuestas, en lugar de tener que lidiar con diferentes estructuras para cada punto final (endpoint).
5. Valida el JSON Antes de Procesarlo
Nunca asumas que el JSON entrante será sintácticamente correcto o contendrá la estructura esperada. Realiza siempre validaciones tanto de la sintaxis (¿es JSON válido?) como de la estructura (¿contiene los campos que anticipas?) antes de proceder con el procesamiento.
- En PHP, verifica
json_last_error() === JSON_ERROR_NONEdespués de invocarjson_decode(). - En JavaScript/Node.js, rodea la llamada a
JSON.parse()con un bloquetry/catch. - Emplea librerías de validación como JSON Schema para verificar sistemáticamente la estructura, los tipos de datos y los campos obligatorios.
6. Comprime (Minify) el JSON para Producción, Agréga Legibilidad (Beautify) para Desarrollo
Durante la fase de desarrollo y para archivos de configuración que se guardan en sistemas de control de versiones, utiliza JSON "prettified" con indentación para facilitar la lectura. En las respuestas de API en producción, sirve JSON comprimido (minified) para reducir el tamaño de la carga útil (payload).
Un archivo de configuración JSON bien formateado con 500 líneas podría ocupar 20KB. Su equivalente comprimido podría reducirse a 12KB, lo que representa una disminución del 40%. Al ser transmitido sobre HTTPS con compresión GZIP, el JSON comprimido alcanza una mejor ratio de compresión que el JSON formateado.
Utiliza nuestro Minificador de JSON gratuito para optimizar tu JSON para producción, y nuestro Formateador de JSON para expandir JSON comprimido con el fin de leerlo y editarlo.
7. Evita Estructuras Excesivamente Anidadas
El JSON con anidación profunda es difícil de leer, complejo de consultar y a menudo es un indicativo de un modelado de datos deficiente. Como regla general, intenta mantener la profundidad de tu JSON en un máximo de 3 a 4 niveles. Si te encuentras anidando objetos 6 o 7 niveles de profundidad, es una clara señal para reconsiderar tu modelo de datos.
{
"usuario": {
"perfil": {
"direccion": {
"facturacion": {
"pais": { "codigo": "US" }
}
}
}
}
}
{
"id_usuario": 42,
"codigo_pais_facturacion": "US"
}
8. Maneja Números Grandes con Precaución
La función JSON.parse() de JavaScript utiliza números de punto flotante de doble precisión IEEE 754 para todos los números. Estos solo pueden representar de forma segura enteros hasta 2^53 - 1 (9,007,199,254,740,991). Los IDs y las marcas de tiempo (timestamps) que superan este límite pierden precisión al ser procesados en JavaScript.
La solución: para IDs enteros de gran magnitud (como los IDs "snowflake" de Twitter), proporciona tanto una representación numérica como una en formato de cadena: "id": 944985814402506752, "id_str": "944985814402506752". Los consumidores que requieran alta precisión podrán utilizar la versión en cadena.
9. Utiliza `null` para Campos Opcionales Ausentes
Cuando un campo está definido en tu esquema pero no tiene un valor asociado para un recurso particular, inclúyelo explícitamente como null en lugar de omitirlo. La omisión de campos dificulta la distinción entre "este campo no existe en el esquema" y "este campo existe pero no tiene valor". La presencia consistente de campos asegura respuestas predecibles en tu API.
10. Versiona Tu API
A medida que tu API evolucione, será necesario realizar cambios que puedan ser incompatibles con versiones anteriores en la estructura del JSON. Planifica esto desde el principio versionando tu API. Puedes hacerlo a través de la ruta URL (/api/v1/usuarios), un parámetro de consulta (?version=2) o mediante la cabecera Accept (Accept: application/vnd.tuapi.v2+json).
Trabaja con JSON de Forma Más Eficiente
Utiliza nuestras herramientas gratuitas de JSON para comprimir, formatear y validar JSON en cuestión de segundos.