在 JSON Schema 中没有明确定义的方法。
虽然 JSON Schema 中有一个“default”关键字,但它主要用于 用户界面 使用,以提供默认初始值。考虑架构:
{ "type":"string", "minLength":1, "default":"" }
在这种情况下,意思是“当我创建这个模式的一个实例时,给它一个空字符串的初始值。”
首先,请注意此默认文档仍然无效——它必须由用户更改才能生效。 “默认”只需要格式良好的 JSON。提供它是因为在这种情况下,空字符串比空文档(这将是无效的 JSON)更好的默认值。
其次,JSON Schema 不假定未定义的值与提供的默认值相同。允许使用默认值填充未定义的属性以更改实例的含义。例如,给定这个架构:
{ "properties":
"port": { "type":"number", "default": 80 }
}
未定义的属性可能意味着一件事,但一旦我创建了该属性,它应该默认为 80。
第三,“默认”关键字甚至不适用,除非实例存在以便可以考虑该关键字。如果您尝试在对象中填充属性,为了让 JSON 模式验证器“看到”“默认”关键字,它必须首先将实例应用于具有此类关键字的模式。
使用上面的模式,如果你有一个像{} 这样的实例,验证器甚至不会遇到“默认”关键字,因为该实例没有“端口”属性来加载包含它的子模式。
我不知道有一个库可以像你描述的那样做任何事情。
但是如果你想写一个,我建议你写一个这样的模式:
{
"default": {
"port": 80
},
"properties": {
"port": { "type":"integer" }
}
}
这将使验证器可以访问“default”关键字的值,即使“port”属性缺失。然后,您可以编写一个简短的脚本来合并任何缺失的属性。
请参阅https://github.com/json-schema-org/json-schema-spec/issues/858,了解 JSON Schema 问题跟踪器中的类似内容。