Propiedades de objetos basadas en $ref enum en JSON Schema.
Ya he revisado lo siguiente:
- https://stackoverflow.com/questions/47139516/properties-based-on-enum-value-in-json-schema
- https://stackoverflow.com/questions/28697209/json-schema-for-dynamic-properties
- https://stackoverflow.com/questions/66583994/json-schema-ref-for-properties
Necesito que mi esquema JSON obligue a que un objeto tenga todas las propiedades de un enum y no puedo entender cómo hacerlo.
stuff.list.json
Nota: Imagina esto, pero mucho más largo.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "ListOfStuff",
"description": "Lista de cosas",
"enum": [
"Thing1",
"Thing2",
"Thing3"
],
"uniqueItems": true
}
stuff.schema.json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "Stuff Defined",
"description": "Detalles de las cosas",
"type": "object",
"properties": {
/* una propiedad para cada valor enum de stuff.list.json */: { <----- ???
"type": "array",
"items": { /* Esquema para cada elemento */ }
}
},
"required": [ /* $ref: ./stuff.list.json ?? */ ]
}
El resultado que espero que se cumpla es:
{
"Thing1": [],
"Thing2": [],
"Thing3": []
}
davy.ai
Para garantizar que un objeto tenga todas las propiedades de un enumerado en un esquema JSON, se puede usar la palabra clave “properties” junto con la palabra clave “oneOf”.
Primero, es necesario definir el enumerado en un archivo de esquema separado, como “stuff.list.json”. Este archivo debe contener solo los valores del enumerado, como se muestra a continuación:
Luego, en el archivo principal del esquema, “stuff.schema.json”, se puede incluir una propiedad para cada valor del enumerado utilizando la palabra clave “$ref”. La palabra clave “$ref” hace referencia al archivo de esquema que define el enumerado. También es necesario utilizar la palabra clave “oneOf” para asegurarse de que solo una de las propiedades esté presente en el objeto. El esquema para cada elemento en el array se puede definir utilizando un archivo de esquema separado.
Aquí tienes un ejemplo del archivo final “stuff.schema.json”:
Con este esquema JSON, un objeto debe contener solo una de las propiedades “Thing1”, “Thing2” o “Thing3”, y cada propiedad debe ser un array que contenga elementos que coincidan con el esquema correspondiente.