Generador de JSON Schema
Genera automáticamente definiciones de JSON Schema conformes al estándar a partir de datos JSON
// El JSON Schema se generará automáticamente¿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
- Pega datos JSON en el panel izquierdo o haz clic en Sample para cargar datos de ejemplo
- Configura las opciones: define el Schema ID, elige si todos los campos son obligatorios y añade valores predeterminados, entre otros.
- La definición correspondiente de JSON Schema se genera automáticamente a la derecha
- Haz clic en Copy para copiar el Schema generado al portapapeles
- 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
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.