Inicio › Herramientas para desarrolladores › Generador de JSON Schema

Generador de JSON Schema

Pega un documento JSON de ejemplo y obtén al instante un JSON Schema listo para usar. Los tipos, los objetos anidados, los elementos de los arrays, los campos obligatorios y los formatos de cadena como email, date-time y uri se infieren por ti, y nada sale de tu navegador.

Última actualización:

Resumen de campos
RutaTipoFormatoObligatorio
Publicidad
Publicidad

Cómo usar Generador de JSON Schema

  1. Pega un JSON de ejemplo en el editor de la izquierda, sube un archivo .json o carga el ejemplo. Usa datos reales con todos los campos que esperas.
  2. Elige el draft (2020-12 es la versión actual) y cómo se deben elegir los campos obligatorios.
  3. Activa o desactiva las opciones: detección de formatos, ejemplos, restricciones mín./máx. y additionalProperties estricto.
  4. Revisa el schema a la derecha y el resumen de campos debajo. Se actualiza mientras escribes.
  5. Copia o descarga el schema como schema.json y ajusta a mano títulos, descripciones o enums.

Cómo se asignan los valores JSON a los tipos del schema

Valor de ejemploSchema generadoNotas
"Ann"{"type": "string"}Más format cuando todos los valores coinciden con uno
42{"type": "integer"}Solo números enteros
4.5{"type": "number"}Se usa si algún valor tiene decimales
true{"type": "boolean"}
null{"type": "null"}Combinado: ["string", "null"]
{"a": 1}{"type": "object", "properties": {…}, "required": […]}Los objetos anidados se describen de forma recursiva
[1, 2]{"type": "array", "items": {"type": "integer"}}Todos los elementos se combinan en un único schema items

Formatos de cadena detectados

formatEjemploEstándar
date-time2024-05-01T09:30:00Z, 2024-05-01T09:30:00.5+02:00Fecha y hora RFC 3339 (desfase obligatorio)
date2024-05-01RFC 3339 full-date
time09:30:00ZRFC 3339 full-time
email[email protected]Buzón RFC 5321
urihttps://example.com/a?b=1URI absoluta RFC 3986
uuidb3f1c2d4-5e6f-4a1b-9c8d-7e6f5a4b3c2dRFC 4122
ipv4 / ipv6192.168.0.1, 2001:db8::1RFC 2673 / RFC 4291

Un valor como 2024-05-01 09:30 (espacio en lugar de T, sin segundos ni desfase) no es un date-time RFC 3339 válido, así que se queda como cadena simple. En draft 2020-12, format es una anotación por defecto: validadores como Ajv solo lo aplican cuando la validación de formatos está activada (por ejemplo, con el plugin ajv-formats).

Consejos para generar un schema mejor

  • Dale varios ejemplos. Pega un array de registros reales en lugar de un solo objeto. Los campos que faltan en algunos registros pasan a ser opcionales, y los campos que admiten null reciben "null" en su tipo.
  • Edítalo antes de publicarlo. La inferencia no puede conocer las reglas de negocio. Añade enum para listas de valores fijos, pattern para los ID, description para la documentación, y amplía los límites mín./máx. que salieron de un ejemplo pequeño.
  • Objetos estrictos. "additionalProperties": false rechaza cualquier propiedad no listada. Es útil para los cuerpos de las solicitudes de API, pero hace que el schema falle cada vez que se añade un campo nuevo.
  • Valídalo. Prueba el schema con tu ejemplo y algunos registros erróneos en un validador antes de confiar en él.

Preguntas frecuentes

¿Qué es un JSON Schema?

JSON Schema es un vocabulario para describir la estructura de datos JSON: qué propiedades tiene un objeto, sus tipos, cuáles son obligatorias y qué valores se permiten. Los validadores como Ajv usan un schema para comprobar que el JSON recibido es correcto.

¿Qué draft de JSON Schema debo elegir?

Elige draft 2020-12 salvo que alguna herramienta que uses requiera algo más antiguo. Es la versión publicada más reciente y la usa OpenAPI 3.1. Draft-07 sigue siendo común en validadores y editores antiguos. Para las palabras clave que genera este generador, los drafts solo se diferencian en la URI de $schema.

¿Cómo se deciden los campos obligatorios?

Con la configuración predeterminada, una propiedad es obligatoria solo si aparece en todos los objetos de esa forma en tu ejemplo. Si pegas un array de 10 usuarios y solo 7 tienen el campo phone, phone es opcional. También puedes marcar todos los campos como obligatorios o ninguno.

¿Cómo funciona la detección de formatos?

Una cadena recibe un formato como email, date-time, date, time, uri, uuid, ipv4 o ipv6 solo cuando todos los valores de ejemplo de ese campo coinciden con el patrón. date-time sigue el RFC 3339, por ejemplo 2024-05-01T09:30:00Z. Ten en cuenta que los validadores tratan format como una anotación salvo que la aserción de formatos esté activada.

¿Por qué un campo tiene el tipo integer y no number?

El tipo integer de JSON Schema coincide con cualquier número sin parte decimal. Si todos los valores de ejemplo son números enteros, el generador usa integer; si algún valor tiene decimales, el campo pasa a number, que también acepta enteros.

¿Qué pasa con los valores null o los tipos mixtos?

Un campo que a veces es una cadena y a veces null recibe "type": ["string", "null"]. Los tipos complejos mixtos, como un objeto en un elemento y un array en otro, se combinan con anyOf.

¿Se sube mi JSON a algún sitio?

No. El análisis y la inferencia del schema se ejecutan íntegramente en JavaScript en tu navegador, así que las respuestas privadas de API y los archivos de datos se quedan en tu dispositivo.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Generadores de código →