我有一个字段状态。
如果用户将作业设置为草稿状态,则不需要描述字段-但我希望默认值为空字符串。
如果用户发布的作业超出了我想要的描述。
我不知道是如何在“ oneOf-草稿”数组中为说明设置默认值的。
这是我的模式
{
"schema": "http://json-schema.org/draft-04/schema#",
"$id": "http://company.com/schemas/job-update.json#",
"title": "Job",
"description": "Update job",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 2
},
"description": {
"type": "string"
// Can't set default here - as it will apply for the publish status.
},
"status": {
"enum": ["draft", "published", "onhold"],
"default": "draft"
}
},
"oneOf": [
{
"description": "Draft jobs do not require any validation",
"properties": {
"status": { "enum": ["draft"]}
},
"required": []
// SOME WHERE HERE SET DESCRIPTION.default: ""
},
{
"description": "Published jobs require validation on required fields",
"properties": {
"status": { "enum": ["published"]}
},
"required": [
"description"
],
}
],
"additionalProperties": false
}
答案 0 :(得分:0)
不幸的是,使用纯JSON模式无法做到这一点。
JSON模式验证不会修改实例数据。
JSON模式中的default
关键字是注释关键字。
注释关键字用于表示信息,但是它们没有验证要求。
草稿7(当前)说:
此关键字的值没有限制。什么时候 此关键字的多次出现适用于单个 子实例,实现应删除重复项。
此关键字可用于提供关联的默认JSON值 具有特定的架构。建议默认值为 对关联的模式有效。
https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-10.2
没有与注释关键字相关的已定义行为。
请记住,JSON模式的主要用例是定义,验证和注释。
但是...
如果您不关心模式的可移植性,则ajv实现允许您在验证过程中使用default
值来设置密钥,但是JSON Schema并未定义此行为。