validator validate valid online example additionalproperties jsonschema

jsonschema - validate - Esquema JSON-requiere todas las propiedades



valid schema (3)

El campo required en el esquema JSON

El esquema JSON presenta los campos de properties , properties required y properties additionalProperties . Por ejemplo,

{ "type": "object", "properties": { "elephant": {"type": "string"}, "giraffe": {"type": "string"}, "polarBear": {"type": "string"} }, "required": [ "elephant", "giraffe", "polarBear" ], "additionalProperties": false }

Validará objetos JSON como:

{ "elephant": "Johnny", "giraffe": "Jimmy", "polarBear": "George" }

Pero fallará si la lista de propiedades no es exactamente elephant, giraffe, polarBear .

El problema

A menudo copio y pego la lista de properties en la lista de required y sufro de errores molestos cuando las listas no coinciden debido a errores tipográficos y otros errores tontos.

¿Hay una manera más corta de denotar que todas las propiedades son necesarias, sin nombrarlas explícitamente?


Dudo que exista una manera de especificar propiedades requeridas que no sean explícitamente nombrarlas en la matriz requerida.

Pero si encuentra este problema muy a menudo, le sugiero que escriba un pequeño script que postprocese su esquema json y agregue automáticamente la matriz necesaria para todos los objetos definidos.

La secuencia de comandos solo tiene que atravesar el árbol de esquema json y, en cada nivel, si se encuentra una palabra clave "propiedades", agregue una palabra clave "requerida" con todas las claves definidas contenidas en las propiedades en el mismo nivel.

Deja que las máquinas hagan las cosas del agujero.


Hago esto en código con una sola línea, por ejemplo, si quiero usar el required para insert en una base de datos, pero solo quiero validar contra el esquema al realizar una update .

prepareSchema(action) { const actionSchema = R.clone(schema) switch (action) { case ''insert'': actionSchema.$id = `/${schema.$id}-Insert` actionSchema.required = Object.keys(schema.properties) return actionSchema default: return schema } }


Puede usar la propiedad "minProperties" en lugar de nombrar explícitamente todos los campos.

{ "type": "object", "properties": { "elephant": {"type": "string"}, "giraffe": {"type": "string"}, "polarBear": {"type": "string"} }, "additionalProperties": false, "minProperties": 3 }