Esquema JSON para imponer contenidos de matriz
Hola a todos y gracias de antemano.
Estoy intentando crear un esquema JSON para imponer una matriz que contenga un objeto A y B y objetos N C, donde A y B son objetos C y N es un número entero inclusive entre 0 e infinito.
Para eso
[A, B]
[A, B, C1]
[A, B, C1, .., CN]
Son todosválido, aunque :
[A]
[A, C1]
[A, C1, .., CN]
Sonno es válido.
Para dejar en claro, A y B deben estar presentes. Los objetos C son opcionales, aunque puede tener tantos como desee.
Esquemas de objeto C:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "C Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"additionalProperties": false
}
Por lo tanto, un objeto C es cualquier objeto JSON válido que contiene solo las propiedades "id" y "name", donde "id" es un entero y "name" es una cadena.
Esquemas de objetos A y B:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "A Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"enum": ["A"]
}
},
"additionalProperties": false
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "B Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"enum": ["B"]
}
},
"additionalProperties": false
}
Los objetos A y B difieren de los objetos C en que allí se aplica el valor de nombre. El valor del nombre de un objeto A debe ser un valor contenido en la enumeración del campo, donde la enumeración contiene un solo valor.
Mi esquema más completo hasta la fecha es:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "To Date Solution",
"description": "So far this is the most complete attempt at enforcing values to be contained within a JSON structure using JSON schemas.",
"type": "array"
"items": {
"allOf": [
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "C Object",
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"additionalProperties": false
}
]
}
}
Esto obliga a que todos los objetos contenidos dentro sean del tipo C, que son A y B, aunque no estoy seguro de cómo imponer que al menos una única instancia de A y B esté contenida dentro de mi matriz.