Generador de Esquema JSON

Pega una o varias muestras JSON y el generador infiere un Esquema JSON que puedes usar para validar nuevas cargas. Detecta tipos, marca campos como requeridos cuando aparecen en cada muestra, infiere enums cuando los valores provienen de un pequeño conjunto cerrado, y produce una salida que cumple con el borrador de Esquema JSON 2020-12.

Cómo generar un Esquema JSON

  1. 1

    Pega documentos de muestra

    Uno o varios payloads reales, cuanta más variedad, más preciso será el esquema inferido.

  2. 2

    Elige el borrador

    Borrador 2020-12 (actual), borrador 07 (ampliamente soportado) o borrador 04 (OpenAPI legado).

  3. 3

    Ajusta la inferencia

    Activa la inferencia de enums, estrategia de campos requeridos (intersección vs unión), y si marcar todos los campos como `requeridos` cuando solo se da una muestra.

  4. 4

    Generar

    El esquema se emite con `$schema`, `title`, `type`, `properties`, y `$ref`s anidados para sub-objetos repetidos.

Lo que la inferencia hace bien

  • Tipos: string, number, integer, boolean, null, array, object.
  • Nullabilidad: un campo que es null en una muestra y un string en otra se convierte en ["string", "null"].
  • Elementos de array: arrays homogéneos producen un único esquema items; arrays heterogéneos producen prefixItems.
  • Enumeraciones (enum): si todos los valores observados provienen de un pequeño conjunto (configurable, por defecto 10 valores distintos), emite un enum.
  • Requeridos: con múltiples muestras, la intersección de claves se convierte en required; con una muestra, todas las claves son requeridas a menos que optes por no incluirlas.
  • Formatos: strings que coinciden con fechas ISO-8601, correos electrónicos o URIs obtienen un format inferido.

Lo que la inferencia no puede saber

  • Intención vs ejemplo: una muestra age: 25 infiere type: integer, pero no puede saber que también aceptas null. Pasa múltiples muestras que cubran casos extremos.
  • Restricciones: minLength, maximum, pattern, debes añadir estos manualmente. La inferencia no adivina límites a partir de muestras.
  • Lógica de negocio: “exactamente uno de estos tres campos debe estar establecido” requiere oneOf, no es inferible.
  • Referencias: el generador emite un esquema plano. Si deseas factorizar formas repetidas en $defs, hazlo después de la generación.

Ejemplo de salida

De una sola muestra:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

El esquema inferido (borrador 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

Errores comunes

  • Inferir de una sola muestra. El esquema se ajustará demasiado, cada campo se vuelve requerido, sin tolerancia a null. Siempre proporciona al menos 5-10 muestras variadas.
  • Usar integer cuando querías number. Si alguna muestra tiene un decimal, el tipo inferido se convierte en number; si todas son enteras, se convierte en integer. Para campos que podrían ser cualquiera, incluye una muestra decimal.
  • Olvidar campos opcionales. Un campo presente en 4 de 5 muestras pero ausente en 1 se convierte en opcional, intencionado. Si las 5 muestras lo incluyen, el esquema lo marcará como requerido aunque en realidad sea opcional en tu API.

Preguntas frecuentes

Cuantas más, mejor, pero 5-10 muestras variadas suelen producir un esquema razonable. Con una muestra, cada campo se vuelve requerido y la nullabilidad no puede ser inferida, siempre proporciona múltiples variantes si puedes.

Borrador 2020-12 por defecto. Los borradores 07 y 04 están disponibles para compatibilidad con OpenAPI 3.0 (que utiliza un subconjunto de borrador 05/07).

No. Inferir restricciones sensatas a partir de muestras ajustaría demasiado el esquema. Añade minLength, maximum, pattern, etc. manualmente después de la generación según tus reglas de negocio.

Sí. Si pegas un array JSON, el generador trata cada elemento como una muestra separada y produce un esquema que describe un elemento individual, no el array exterior. Activa “tratar como contenedor de array” si deseas la forma del array exterior en su lugar.

Herramientas relacionadas

Herramienta disponible en otros idiomas