Saltar al contenido

Convertir JSON a JSON Schema — Numio

Deduce un JSON Schema (draft-07) a partir de una muestra JSON. En los arrays de objetos se combinan todos los elementos: una clave que falta o es null en algunos elementos queda fuera de required.

Crear un primer esquema de validación para una respuesta de API o el payload de un webhook a partir de ejemplos capturados.

JSON

JSON Schema

Cuándo usarla

  • Crear un primer esquema de validación para una respuesta de API o el payload de un webhook a partir de ejemplos capturados.
  • Obtener un esquema para usarlo en Ajv, en OpenAPI o en un paso de JSON Schema a TypeScript/Zod.

Cómo usarla

  1. Pega una muestra JSON en el editor izquierdo (un array con varios registros da mejores listas required), o usa el botón de cargar archivo para abrir un archivo UTF-8.
  2. Lee el esquema: en un objeto único todas las claves son obligatorias, y las claves ausentes o null en algunos elementos del array son opcionales.
  3. Copia el esquema y añade las restricciones que la muestra no puede indicar, como formatos, enums, integer y minimum.

Muestra JSON

[
  { "id": 1, "name": "Ada", "email": null },
  { "id": 2, "name": "Lin", "email": "lin@example.com" }
]

JSON Schema (draft-07)

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Generated schema for Root",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "name": {
        "type": "string"
      },
      "email": {
        "type": "string"
      }
    },
    "required": [
      "id",
      "name"
    ]
  }
}

Detalles y limitaciones

Los números siempre son "type": "number"; no se deducen integer, formatos (email, date-time), enums ni patrones. El title siempre es "Generated schema for Root".

Un campo que es null en todas partes recibe un esquema vacío {}. Un null junto a otros valores se trata como opcional, no como tipo null.

Los arrays de tipos mixtos como [1, "x"] pasan a ser una tupla (lista items con additionalItems: false); un array vacío da items: {}.

Se genera en tu navegador con json_typegen compilado a WebAssembly. Si el JSON no es válido (incluidas las comas finales) se muestra el error de análisis, y un valor suelto como 42 se rechaza porque no tiene estructura.

FAQ

¿Qué draft de JSON Schema genera?

Draft-07, declarado como "$schema": "http://json-schema.org/draft-07/schema#". No hay opción para elegir 2019-09 o 2020-12.

¿Cómo se detectan los campos opcionales?

Solo entre elementos del mismo array: una clave que falta en algunos objetos, o que es null en algunos, queda fuera de required. En un objeto único todas las claves son obligatorias.

¿Puede convertir un array JSON en la raíz?

Sí. La raíz recibe "type": "array" y los elementos se combinan en un único esquema items, como en el ejemplo.

Especificaciones y referencias