Saltar al contenido principal

JSON Schema Generator

Genera un JSON Schema desde JSON.

Entrada JSON

Lín 1, Col 1
JSON

Resultado

Tu resultado aparecerá aquí

Añade JSON arriba y elige Generar.

Añade JSON a la izquierda y elige Generar.

Esperando entrada

2 espacios

Genera un JSON Schema (draft 2020-12) a partir de un JSON de ejemplo, listo para copiar y ajustar.

¿Qué es JSON Schema Generator?

JSON Schema Generator es una herramienta en línea gratuita que lee un documento JSON de ejemplo en tu navegador y escribe un JSON Schema (draft 2020-12) que lo describe: el tipo de cada valor, las propiedades de cada objeto, los elementos de cada lista y qué propiedades son obligatorias. Es un punto de partida para refinar, no un contrato terminado.

Úsalo para empezar un esquema a partir de una respuesta de API o de un archivo de configuración reales, y luego afínalo a mano.

Qué admite

  • Cualquier valor JSON como ejemplo: un objeto, una lista o un valor único.
  • El resultado es un esquema del draft 2020-12 que empieza con "$schema": "https://json-schema.org/draft/2020-12/schema".
  • type es uno de object, array, string, number, integer, boolean y null. Un número entero, como 7, es un integer, y un número con parte fraccionaria, como 9.5, es un number. Cuando ambos aparecen en el mismo lugar, el tipo es number.
  • Un objeto recibe properties, una por cada nombre, y required, que enumera los nombres presentes en todos los objetos vistos en ese lugar. Para un único objeto, son todos los nombres. required se omite cuando ningún nombre está en todos los objetos.
  • Una lista recibe items, un único esquema construido con todos sus elementos juntos. Los objetos de una lista se reúnen: un nombre solo es obligatorio si está presente en todos ellos. Una lista vacía recibe {} como items.
  • Cuando el mismo lugar contiene distintos tipos de valor, type pasa a ser una lista ordenada por nombre, como ["integer", "null", "string"]. Cuando se encuentran enteros y otros números, el tipo es solo number.
  • El esquema se escribe con la sangría que elijas, 2 o 4 espacios.

Conviene saber

  • El esquema describe este único ejemplo, así que es un punto de partida. No sabe qué propiedades son opcionales, qué textos son fechas o correos electrónicos, ni qué rango puede tener un número: todo nombre es obligatorio, a menos que otro objeto del ejemplo no lo tenga, y no se añade ningún format, pattern, minimum ni enum.
  • No se define additionalProperties, así que el esquema acepta propiedades extra. Añade tú mismo "additionalProperties": false si quieres prohibirlas.
  • Una lista con varios objetos del mismo tipo da un esquema más útil que un único objeto: pon algunos elementos típicos en tu ejemplo.
  • null en un ejemplo da el tipo null, no «un valor que puede faltar». Si un campo puede ser un texto o null, muestra los dos casos, por ejemplo en dos elementos de una lista.
  • Un nombre repetido dentro de un objeto, y una cadena con un escape subrogado sin pareja, se rechazan en lugar de adivinarse.

¿Cómo se usa JSON Schema Generator?

  1. Pega o escribe un documento JSON de ejemplo en el cuadro de entrada. No se ejecuta nada mientras escribes.
  2. Elige la sangría («2 espacios» o «4 espacios») y pulsa «Generar».
  3. Lee el esquema junto a tu entrada. Si no se puede usar el ejemplo, el mensaje explica el motivo e indica la línea y la columna.
  4. Pulsa «Copiar» para poner el esquema en el portapapeles, o «Descargar» para guardarlo como schema.json.

Ejemplos

Un objeto con varios tipos de valores

Pega este ejemplo y pulsa «Generar». 7 es un integer y 9.5 es un number, la lista tags recibe items de tipo string, el objeto anidado address recibe sus propias properties y required, y null da el tipo null. Todo nombre del ejemplo entra en required, porque un único ejemplo no muestra qué nombres son opcionales. El esquema empieza con una línea $schema para el draft 2020-12.

{
  "id": 7,
  "name": "Ada",
  "active": true,
  "score": 9.5,
  "tags": [
    "math",
    "poetry"
  ],
  "address": {
    "city": "London"
  },
  "nickname": null
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string"
    },
    "active": {
      "type": "boolean"
    },
    "score": {
      "type": "number"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "address": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": [
        "city"
      ]
    },
    "nickname": {
      "type": "null"
    }
  },
  "required": [
    "id",
    "name",
    "active",
    "score",
    "tags",
    "address",
    "nickname"
  ]
}

Un nombre repetido en el ejemplo

El nombre «id» aparece dos veces en el mismo objeto. La herramienta se niega en lugar de elegir un valor que describir, e indica la línea y la columna del nombre.

{"id": 1, "id": 2}

Un objeto repite el nombre de un miembro. Cada programa decide qué valor prevalece, así que esta herramienta lo rechazó en lugar de conservar un valor y descartar el otro. Haz los nombres únicos e inténtalo de nuevo.

Línea 1, columna 2

Una lista de objetos

El esquema de los elementos se construye con todos los objetos de la lista juntos. id está en los dos, así que es obligatorio; name está en uno solo, así que es una propiedad, pero no es obligatoria.

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

Listas con valores mezclados o sin elementos

En ids, un número entero y 2.5 se reúnen en un solo tipo, number. En mixed, tres tipos de valor dan una lista de tipos, ordenada por nombre. La lista vacía no tiene de qué aprender, así que sus items son un esquema vacío, {}, que acepta cualquier cosa.

{"ids": [1, 2.5], "mixed": [1, "a", null], "empty": []}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "mixed": {
      "type": "array",
      "items": {
        "type": [
          "integer",
          "null",
          "string"
        ]
      }
    },
    "empty": {
      "type": "array",
      "items": {}
    }
  },
  "required": [
    "ids",
    "mixed",
    "empty"
  ]
}

Límites y privacidad

Límites de tamaño

  • Entrada: hasta 2.000.000 bytes de texto en UTF-8 (unos 2 MB). Las letras acentuadas y los emojis ocupan más de un byte cada uno. Una entrada mayor se rechaza.
  • Resultado: también hasta 2.000.000 bytes. Si el resultado completo fuera mayor, la herramienta muestra solo una vista previa incompleta de los primeros 100.000 bytes, y esa vista previa no se puede copiar ni descargar.
  • Anidamiento: hasta 256 niveles de objetos y listas dentro de otros. Un JSON más profundo se rechaza porque supera lo que procesa la herramienta.
  • Tiempo: una ejecución que tarda más que su límite de tiempo se detiene. Prueba con una entrada más pequeña.

¿Se envía mi texto a un servidor?

No. El texto que escribes o pegas, o abres desde un archivo local, se procesa localmente en tu navegador, en un Web Worker dedicado. Nunca se sube ni se envía al servidor (un archivo que abres se lee solo en tu navegador), y no se escribe en el almacenamiento, en cookies ni en la barra de direcciones.

«Copiar» pone el resultado en el portapapeles y «Descargar» lo guarda como archivo, pero solo cuando pulsas el botón. El archivo se crea en tu navegador, así que no se sube nada.

Para conocer todos los detalles, consulta la Política de privacidad

Herramientas y páginas relacionadas

Tu texto se queda en la página cuando cambias de herramienta en la misma pestaña, así que puedes probar el mismo texto en otra. Recargar o cerrar la pestaña lo termina.

Todas las herramientas