nwk*_*ley 8 jsonschema json-schema-validator json-schema-defaults
我有外地身份。
如果用户将作业设置为草稿状态,我不想要求描述字段 - 但我确实希望有一个默认的空字符串。
如果用户正在发布作业,那么我希望需要描述。
我无法弄清楚如何在“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
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用纯 JSON 模式这是不可能的。
JSON 模式验证不会修改实例数据。
JSON Schema 中的关键字default是注释关键字。注释关键字用于表示信息,但没有验证要求。
Draft-7(当前)是这样说的:
该关键字的值没有任何限制。当此关键字多次出现适用于单个子实例时,实现应该删除重复项。
此关键字可用于提供与特定模式关联的默认 JSON 值。建议默认值对关联模式有效。
https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-validation-01#section-10.2
没有与注释关键字相关的定义行为。
请记住,JSON 架构的主要用例是定义、验证和注释。
然而...
如果您不关心架构的可移植性,ajv实现允许您在验证期间使用default值来设置键,但 JSON 架构未定义此行为。
| 归档时间: |
|
| 查看次数: |
22772 次 |
| 最近记录: |