Всем привет и заранее спасибо.
Я пытаюсь создать схему 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 должно быть значением, содержащимся в поле enum, где enum содержит единственное значение.
Моя самая полная на сегодняшний день схема:
{
"$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 содержался в моем массиве.
A
иB
быть первыми двумя (в таком порядке)? Или они могут появиться где угодно в списке? - person cloudfeet   schedule 06.11.2013