Привет всем и спасибо заранее.
Я пытаюсь создать схему JSON для принудительного применения массива, чтобы содержать один объект A и B и объекты N C, где A и B - объекты C, а N - целое число, включающее от 0 до бесконечности.
Для этого:
[A, B]
[A, B, C1]
[A, B, C1, .., CN]
Все действительны, хотя:
[A]
[A, C1]
[A, C1, .., CN]
Являются недействительными.
Чтобы сделать ясно, должны присутствовать A и B. Объекты C являются необязательными, хотя у вас может быть столько, сколько вы хотели бы.
Объектные схемы 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
}
Таким образом, объект C - это любой допустимый объект JSON, содержащий только свойства "id" и "name", где "id" является целым числом, а "name" - строкой.
Схемы объектов A и 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
}
Объекты A и B отличаются от объектов C тем, что там указано значение имени. Значение имени объекта A должно быть значением, содержащимся в поле перечисления, где перечисление содержит одно значение.
Моя самая полная схема на сегодняшний день:
{
"$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
}
]
}
}
Это гарантирует, что все объекты, содержащиеся внутри, должны быть типа C, которые являются A и B, хотя я не уверен, как обеспечить, чтобы по крайней мере один экземпляр A и B содержался в моем массиве.