ToolActToolAct

Generador de JSON Schema

Genera automáticamente definiciones de JSON Schema conformes al estándar a partir de datos JSON

Entrada JSON
Líneas: 1 | Caracteres: 0
Salida JSON Schema
// El JSON Schema se generará automáticamente
Propiedades: 0 | Líneas: 1

Opciones de Configuración

Schema ID
Establece un identificador único para el Schema, típicamente en formato URI, usado para referenciar e identificar Schema en sistemas grandes
Todos los Campos Requeridos
Cuando está habilitado, todas las propiedades se añaden al array required, lo que significa que estos campos deben existir en los datos
Añadir Valores por Defecto
Genera automáticamente la propiedad default basándose en los valores reales del JSON de ejemplo, útil para archivos de configuración
Añadir Descripciones de Campo
Añade automáticamente el campo description para cada propiedad, describiendo el tipo de datos y origen, útil para documentación
Modo Estricto
Habilita additionalProperties: false para prohibir propiedades extra no definidas, asegurando consistencia estricta de estructura de datos

¿Qué es JSON Schema?

JSON Schema es una especificación para describir y validar estructuras de datos JSON. Define reglas para estructura, tipos de datos, restricciones y se usa ampliamente para validación de API, validación de formularios, verificación de archivos de configuración, etc.

Con JSON Schema, puedes:

  • Validación de Datos: Verificar que los datos JSON coinciden con el formato y restricciones esperados
  • Generación de Documentación: Generar automáticamente documentación de API y definiciones de tipos
  • Inteligencia de Código: Obtener autocompletado inteligente y verificación de tipos en IDEs
  • Pruebas Automatizadas: Validar automáticamente el formato de datos de respuesta en pruebas

Esta herramienta soporta la especificación JSON Schema Draft-07, infiriendo inteligentemente objetos anidados, tipos de array, valores enum y otras estructuras complejas.

Cómo usar

Cómo usar

  1. Pega datos JSON en el panel izquierdo o haz clic en Sample para cargar datos de ejemplo
  2. Configura las opciones: define el Schema ID, elige si todos los campos son obligatorios y añade valores predeterminados, entre otros.
  3. La definición correspondiente de JSON Schema se genera automáticamente a la derecha
  4. Haz clic en Copy para copiar el Schema generado al portapapeles
  5. Usa el Schema para validación de API, validación de formularios o verificación de archivos de configuración

Consejos de Schema

  • Los esquemas generados reflejan el JSON de ejemplo que proporcionas, así que incluye campos opcionales representativos, valores nulos, arrays y casos límite antes de copiar el resultado.
  • Revisa manualmente los campos obligatorios y los formatos numéricos o de cadena; la inferencia basada en ejemplos no siempre puede conocer las reglas de tu negocio.

Casos de uso

Generar borradores de esquema a partir de muestras reales de APIPega una respuesta JSON representativa y genera un esquema draft-07 que captura propiedades de objetos, tipos primitivos, arrays anidados, valores por defecto y campos obligatorios. Ofrece a los equipos de backend y frontend un punto de partida concreto antes de ajustar los casos límite a mano. Una muestra real supera a las suposiciones, porque lo obligatorio frente a lo opcional y la pertenencia a un enum se infieren de lo que realmente aparece en los datos.
Documentar archivos de configuraciónPara ejemplos de configuración interna, habilita valores por defecto y descripciones para producir un esquema útil en editores y documentación. El modo estricto puede añadir additionalProperties: false, lo que facilita detectar claves accidentales una vez que el esquema se integra en la validación. Combina el esquema con una verificación en CI que falle cuando un archivo de configuración deje de cumplir su contrato.
Explorar la forma de los datos antes del trabajo de validaciónEl generador informa del número de propiedades e infiere arrays a partir de los elementos de la muestra, ayudando a ver rápidamente la amplitud aproximada de un payload. Es especialmente práctico para la creación inicial de esquemas cuando existe una muestra en vivo pero aún no se ha redactado un contrato formal. Una vez mapeada la forma, pasa el esquema a un generador de tipos para obtener un tipado más fuerte.
Ajustar los tipos inferidos con indicaciones nullable y requiredUsa las opciones de estricto y nullable para que el esquema draft-07 generado marque los campos opcionales correctamente en lugar de asumir que toda clave siempre está presente. Revisa manualmente el array required resultante, ya que un solo valor ausente en la muestra puede ocultar un campo que en el servidor es obligatorio. Conmuta el manejo de nullable independientemente de required para modelar con precisión un campo que permite null pero que sigue siendo esperado.
Diferenciar draft-07 de 2020-12 y la inferencia de enumsEste generador emite JSON Schema draft-07 por defecto, que sigue siendo el más ampliamente soportado en Ajv, jsonschema y librerías de formularios; los proyectos más nuevos pueden querer actualizar manualmente a 2020-12 para usar if/then/else, prefixItems o la palabra clave const. La inferencia de enums es heurística: cuando un campo de cadena tiene menos de ~10 valores distintos en la muestra, se promueve automáticamente a enum, así que verifica bien campos como status que deberían permanecer abiertos. Trata el esquema draft-07 generado como un borrador inicial y conviértelo a 2020-12 con un transformador si la librería consumidora lo soporta.

Principio técnico

JSON Schema es un vocabulario declarativo para anotar y validar documentos JSON, definido a través de múltiples borradores IETF (Draft 4 / 6 / 7 / 2019-09 / 2020-12). El más reciente es Draft 2020-12, que define siete tipos primitivos (string, number, integer, boolean, array, object, null), un vocabulario de formatos abierto (email, uri, date-time, uuid, ipv4, hostname, ...) y docenas de palabras clave de restricción: pattern (regex), minimum/maximum/exclusiveMinimum/exclusiveMaximum (rango numérico), minLength/maxLength (longitud de cadena), minItems/maxItems/uniqueItems (restricciones de array), required (array de campos obligatorios a nivel de objeto), additionalProperties (si se permiten campos adicionales), enum y const (valores permitidos), y $ref (reutilización de subschemas). La página genera salida Draft 2020-12 por defecto, con el Draft-07 más antiguo (aún el más común en esquemas de producción) seleccionable desde el menú desplegable. La inferencia del generador es un solo recorrido sobre el JSON proporcionado por el usuario, construyendo un objeto de esquema recursivamente. El mapa central de la inferencia es: integer (Number.isInteger y sin parte fraccionaria) -> {type: 'integer'}, float -> {type: 'number'}, string -> {type: 'string'}, boolean -> {type: 'boolean'}, array -> {type: 'array', items: <recursión sobre el primer elemento>} o {type: 'array', prefixItems: [...]} para tuplas en Draft 2020-12, object -> {type: 'object', properties: <recursión sobre cada clave>}, null -> {type: 'null'}. Para arrays de tipos de elementos mixtos, el generador emite un subschema oneOf que cubre cada tipo observado. Para múltiples objetos de muestra, el generador los compila para ensamblar la lista de campos obligatorios: una clave es obligatoria si aparece en todas las muestras, opcional si alguna muestra la omite. Los patrones y restricciones se infieren cuando las muestras se agrupan: si todos los números de un campo caen en [1, 100], el generador emite {type: 'integer', minimum: 1, maximum: 100}; si un campo de cadena es siempre un UUID, el generador lo etiqueta con format: 'uuid' y emite un regex pattern: '^[0-9a-f]{8}-...'. La heurística de enum se activa cuando un campo de cadena toma <=10 valores distintos en las muestras (p. ej. role: 'admin' | 'editor' | 'viewer' todos observados), en cuyo caso el generador emite un array enum. Los objetos profundamente anidados y las estructuras recursivas se extraen a una sección $defs (Draft 2020-12; la antigua $definitions es la palabra clave de Draft-07) y se referencian mediante $ref. Las estructuras recursivas, como un nodo de árbol con un campo 'children' del tipo nodo de árbol, obtienen un stub $ref que apunta a la entrada $defs del padre, que el validador resuelve en tiempo de validación. El generador elige automáticamente el equilibrio adecuado entre ref e inline: los esquemas poco profundos permanecen inline, los profundos se dividen en definiciones para mantener la salida legible. Los esquemas generados son deterministas para una entrada dada: las mismas muestras JSON siempre producen el mismo esquema, y el generador está implementado en JavaScript puro sin llamadas remotas.

  • Reglas de inferencia de tipos: números enteros -> integer, punto flotante -> number, cadenas -> string, booleanos -> boolean, arrays -> array + items, objetos -> object + properties. JSON null -> type: null (Draft 6+) o type: 'null' como cadena.
  • Detección de campos obligatorios: comparando todos los objetos de muestra, los campos presentes en cada objeto se tratan como obligatorios y se añaden al array required; los que faltan son opcionales. La entrada con una sola muestra deja required: [] ya que la heurística necesita al menos dos muestras.
  • Heurística de inferencia de enum: cuando un campo toma un conjunto finito pequeño de valores de cadena distintos entre las muestras (cardinalidad <= 10), se reconoce automáticamente como restricción enum. Las cardinalidades mayores permanecen como tipo string plano.
  • Formato auto-detectado: basado en firmas de cadena, los campos se etiquetan con sugerencias de formato como email, uri, date-time, uuid para documentación y validación. La palabra clave format es informativa en Draft 2020-12: los validadores pueden elegir aplicarla o ignorarla.
  • Extracción de $ref anidados: los objetos profundamente anidados se extraen a $defs internos (palabra clave de Draft 2020-12; la antigua $definitions es de Draft 7) y se referencian mediante $ref, evitando que el Schema sea demasiado verboso. Las estructuras recursivas obtienen un stub $ref que apunta a la entrada $defs del padre.
  • Expansión de restricciones: más allá de los tipos básicos, también puedes añadir minimum/maximum (rango numérico), minLength/maxLength (longitud de cadena), pattern (regex) y restricciones similares. El generador las emite cuando las muestras de entrada se agrupan en valores específicos.
  • Selección de Draft: 2020-12 (el más reciente) es el valor por defecto y usa $defs; 2019-09 también usa $defs; Draft-07 usa $definitions y es lo que la mayoría de las herramientas existentes aún emiten. Draft 6 introdujo la semántica de required estricta donde los campos obligatorios se listan en el array required del padre en lugar de como propiedad hermana.
  • Palabras clave de composición (Draft 2019-09+): allOf (debe coincidir con todos los subschemas), anyOf (al menos uno), oneOf (exactamente uno), not (no debe coincidir). El generador elige oneOf cuando los valores de muestra encajan en dos subschemas disjuntos (p. ej. integer vs string).

Ejemplos

Objeto simple -> Schema

{"name": "Alice", "age": 25}
->
{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" }
  },
  "required": ["name", "age"]
}

Schema con array

{"tags": ["js", "ts"]}
->
{
  "type": "object",
  "properties": {
    "tags": {
      "type": "array",
      "items": { "type": "string" }
    }
  }
}

Schema con enum

{"role": "admin"}
->
{
  "type": "object",
  "properties": {
    "role": { "type": "string", "enum": ["admin", "user", "guest"] }
  }
}

Preguntas frecuentes

¿Qué es JSON Schema?

JSON Schema (actualmente borrador 2020-12) es un vocabulario para validar documentos JSON. Describe la forma esperada de un documento (qué campos existen, sus tipos, rangos y patrones), de manera análoga a XML Schema o a los tipos de TypeScript. Herramientas como Ajv, Hyperjump y la mayoría de los frameworks de API lo consumen para validación en tiempo de ejecución.

¿Qué borrador de JSON Schema genera el generador?

Borradores modernos (típicamente 2020-12 o draft-07). La salida empieza con $schema declarando la versión, $id cuando aplica, type y las palabras clave adecuadas para objetos, arrays, cadenas, números, booleanos y null. Cambia la opción de borrador si tu validador necesita una versión anterior concreta.

¿Cómo infiere los tipos a partir de una muestra JSON?

Recorre la muestra y registra el tipo de cada propiedad. Para los arrays, infiere el esquema de items a partir de uno o varios elementos (tomando la unión si los elementos difieren). Para propiedades de tipo mixto, usa oneOf o anyOf. El resultado es un esquema permisivo de partida; ajusta a mano las restricciones (required, minLength, pattern).

¿Se marcan todas las propiedades como obligatorias?

Es configurable. Por defecto, marca como obligatoria cada propiedad observada. Activa 'todas opcionales' si tu muestra es solo un ejemplo y otras instancias podrían omitir campos legítimamente. Puedes editar el array required tras la generación.

¿Cómo se manejan los objetos y arrays anidados?

Los objetos anidados se convierten en bloques 'properties' anidados; los arrays se convierten en definiciones 'items'. El anidamiento profundo funciona sin problemas. Si la misma forma aparece varias veces, puedes refactorizar después con $defs / $ref: el generador no deduplica automáticamente.

¿Qué cosas no puede inferir a partir de muestras?

Las restricciones de formato (date-time, email, uuid), la pertenencia a un enum, los patrones regex, minimum/maximum, minItems/maxItems y las dependencias hay que añadirlas a mano porque una sola muestra no las revela. Usa el esquema generado como esqueleto y luego ajústalo.

¿Se sube mi JSON?

No. La inferencia se ejecuta localmente. El JSON pegado no sale de tu navegador.