JSONSchema和验证子
鉴于这个JSON对象:
{
"objects": {
"foo": {
"id": 1,
"name": "Foo"
},
"bar": {
"id": 2,
"name": "Bar"
}
}
}
这是一个包含子对象的对象,其中每个子对象具有相同的结构 - 它们都是相同的类型。 每个子对象的键都是唯一的,所以它就像一个命名数组。
我想验证objects
属性中的每个对象是否针对JSON模式引用进行验证。
如果objects
属性是一个数组,例如:
{
"objects": [
{
"id": 1,
"name": "Foo"
},
{
"id": 2,
"name": "Bar"
}
]
}
我可以使用模式定义来验证它,例如:
{
"id": "my-schema",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
}
}
}
这是因为type
是array
,这样就可以验证items
。
是否有可能做类似的事情,但嵌套对象?
谢谢!
你可以尝试这样的事情:
{
"id": "my-schema",
"type": "object",
"properties": {
"objects": {
"type": "object",
"patternProperties": {
"[a-z]+": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"id",
"name"
]
}
}
}
}
}
上述答案适用于将对象属性名称限制为小写字母。 如果你不需要限制属性名称,那么这很简单:
{
"id": "my-schema",
"type": "object",
"properties": {
"objects": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string }
}
},
"required": [
"id",
"name"
]
}
}
}
}
我忽略了上面的答案中的内部"additionalProperties": false
,因为我发现使用该关键字会导致比解决问题更多的问题,但如果您希望内部对象的验证失败(如果它们具有属性),则它是关键字的有效使用除“名称”和“ID”以外。