← El notebookIssue №21Herramientas7 min lecturaFeb 17, 2026

Validar y formatear JSON como un profesional.

JSON malformado, esquemas rotos y debugging de APIs. Todo lo que necesitás saber para que tu API nunca vuelva a fallar por un formato incorrecto.

G
Steven Galo
Fundador · Costa Rica
{}

Estructura de JSON.

JSON (JavaScript Object Notation) es el formato de intercambio de datos más usado en la web. Es simple: objetos con llaves y valores, arrays, strings, números, booleanos y null. Su simplicidad es su ventaja y también su trampa: un solo carácter mal puesto rompe todo el documento.

Las reglas que más desarrolladores olvidan: las llaves de objetos siempre van entre comillas dobles (no simples), no se permiten comas al final del último elemento, y los comentarios no existen en JSON estándar.

Error más común
trailing comma
Herramienta online
jsonlint.com
Schema estándar
JSON Schema

Errores comunes.

Los errores de JSON más frecuentes en el trabajo real:

  • Trailing comma: {"name": "Juan",} — la coma después del último elemento es inválida en JSON.
  • Comillas simples: {'name': 'Juan'} — JSON solo acepta comillas dobles.
  • undefined: {"value": undefined} — undefined no existe en JSON. Usá null.
  • NaN e Infinity: No son valores JSON válidos. Hay que convertirlos antes de serializar.
  • Caracteres sin escapar: Comillas, barras invertidas y ciertos caracteres de control dentro de strings necesitan escape.
// Esto rompe JSON.stringify de forma silenciosa:
JSON.stringify({ fn: () => {}, sym: Symbol('x'), undef: undefined });
// Resultado: {} — los tres campos desaparecen

// Para detectarlo:
const data = { name: 'Juan', callback: () => {} };
const safe = JSON.parse(JSON.stringify(data));
// safe = { name: 'Juan' } — callback silenciosamente eliminado

Validación con schemas.

Parsear JSON sin validar es un riesgo de seguridad y estabilidad. Si una API externa o un usuario puede enviar JSON arbitrario, necesitás validar la estructura antes de usarla. Zod es la librería más elegante para esto en TypeScript:

import { z } from 'zod';

const ArticleSchema = z.object({
  title: z.string().min(1).max(200),
  content: z.string(),
  tags: z.array(z.string()).max(10).optional(),
  publishedAt: z.string().datetime().optional(),
});

function parseArticle(raw: unknown) {
  const result = ArticleSchema.safeParse(raw);
  if (!result.success) {
    throw new Error(`JSON inválido: ${result.error.message}`);
  }
  return result.data; // tipado correctamente
}
JSON.parse lanza un error si el JSON está malformado. Pero no te dice nada si el JSON es válido pero tiene la estructura incorrecta para tu app. Ahí entra la validación de schemas.

Formateo y limpieza.

Para debugging y logging, JSON.stringify acepta parámetros opcionales para formatear la salida:

// Indentación con 2 espacios
console.log(JSON.stringify(data, null, 2));

// Filtrar solo ciertas llaves
console.log(JSON.stringify(data, ['id', 'name', 'email'], 2));

// Transformar valores al serializar
JSON.stringify(data, (key, value) => {
  if (key === 'password') return '[REDACTED]';
  if (value instanceof Date) return value.toISOString();
  return value;
});

Herramientas útiles.

Para el trabajo diario: la herramienta JSON del mismo GaloDev, jq en la terminal para transformar JSON desde scripts, Insomnia o Bruno para probar APIs con JSON, y la extensión JSON Viewer en el browser para formatear automáticamente respuestas de APIs.

— Construido en público

¿Tienes una
sugerencia?

Seguimos construyendo. Si tienes una idea para una herramienta o un tema para el blog, escríbenos directamente o abre un issue en GitHub.