Un schema generado a partir de un documento de ejemplo describe lo que estaba en el ejemplo. Es un punto de partida, no una especificacion impuesta desde algun otro lugar, y esta herramienta esta construida tratandolo de esa manera en lugar de implicar mas certeza de la que los datos realmente soportan.
Usar el generador de JSON Schema
Pega un documento, o un arreglo de varios registros, elige un borrador (2020-12 o Draft 07), si detectar formatos de cadena, y si marcar claves requeridas, luego presiona Generar schema.
Dado
[
{"id": 1, "name": "a", "score": 1},
{"id": 2, "name": "b", "score": 1.5}
]
ambos registros llevan id, name y score, por lo que los tres aparecen
en required. id es un numero entero en cada registro y se convierte en
"integer". score tiene una fraccion en el segundo registro, 1.5, por lo
que su tipo es el mas amplio "number" en lugar de "integer", ya que
realmente contiene valores no enteros.
Por que una clave puede desaparecer silenciosamente de required
Agrega un tercer registro, {"id": 3, "name": "c"}, sin campo score, y
regenera: score ya no es requerido, mientras que id y name permanecen
requeridos. Una clave solo se marca como requerida cuando cada registro en
el arreglo la lleva. Un registro que falta un campo no prueba que el campo
es opcional en toda tu API, pero si prueba que el schema no puede prometer
honestamente que siempre estara ahi, por lo que se vuelve opcional. Esa es
la regla que el FAQ en la pagina declara directamente, ya que es el detalle
que mas probablemente sorprenda a alguien leyendo el resultado.
Deteccion de formato
Un formato de cadena como una fecha o una direccion de correo electronico solo se afirma cuando cada cadena en esa posicion en cada registro coincide con el mismo patron. Eso es lo que impide que un valor afortunado convierta un campo genuinamente de texto libre en algo que parece un formato de fecha estricto, que luego rechazaria datos reales y validos en el momento en que viera un valor que no fuera realmente una fecha.
Lo que esto no puede saber
El generador solo tiene los registros que pegaste. No puede ver los registros
que no pegaste, por lo que un campo que siempre fue un numero positivo en tu
ejemplo no tendra un minimum a menos que agregues uno tu mismo, y un campo
similar a un enum no se convertira en una palabra clave enum a menos que la
agregues. Trata la salida como la forma que tu ejemplo demuestra, y ampliala
a mano donde sepas que los datos reales son mas laxos.
Verificar el resultado
Pega el schema generado y un documento en el validador de JSON Schema para ver si realmente acepta el tipo de documentos que esperas que acepte.