var schema = {
"id": "test.json#",
"definitions": {
"body": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
}
},
"request": {
"properties": {
"user": {
"$ref": "#/definitions/body"
}
}
}
},
"typeA": {
"$ref": "#/definitions/request"
},
"typeB": {
"allOf": [
{"$ref": "#/definitions/request"},
{"required": ["name"]} // Should require the name field in the user object.
]
}
}
var Ajv = require('ajv')
var ajv = Ajv({
schemas: [schema]
})
var data = {
user: {
"name": "tom",
"age": 1
}
}
var valid = ajv.validate({$ref: "test.json#/typeA"}, data)
console.log('VALID', valid) // Returns true.
var valid = ajv.validate({$ref: "test.json#/typeB"}, data)
console.log('VALID', valid) // Returns false.
我是JSON架构的新手。我想在typeA和typeB中重用definitions-request-schema。 typeB应该要求user-object中的name字段。我该如何实现这一目标?我知道为什么上面的解决方案不起作用。必需应该是“user.name”。
感谢您的帮助。
答案 0 :(得分:0)
这是一个如何要求嵌套属性
的示例 {
"$id": "add",
"properties": {
"label": {"type": "string"},
"inputs": {"type": "array", "items": {"type": "string"}},
"outputs": {"type": "array", "items": {"type": "string"}},
"filter": {"type": "array", "items": {"type": "string"}},
"componentConfig": {
"type": "object",
"properties": {
"component": {"type": "string"},
"resource": {"type": "array", "items": {"type": "string"}},
"centerAddress": {"type": "string"}
},
"required": ["component", "resource"]
}
},
"required": ["label", "inputs", "outputs", "filter"]
}