我正在开发一个接受以下 JSON 的应用程序:
{
"gd": { "enabled": true, "show_counts": true },
"ra": { "enabled": true }
}
Run Code Online (Sandbox Code Playgroud)
我开发了一个 JSON 架构来验证此输入,允许某些键是可选的,其他键是必需的,以及一些最小数量的属性。它运行良好,看起来像这样:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"gd": {
"type": "object",
"required": [ "enabled" ],
"additionalProperties": false,
"properties": {
"enabled": { "type": "boolean" },
"show_counts": { "type": "boolean" }
}
},
"ra": {
"type": "object",
"required": [ "enabled" ],
"additionalProperties": false,
"properties": {
"enabled": { "type": "boolean" }
}
}
},
"minProperties": 1
}
Run Code Online (Sandbox Code Playgroud)
让我烦恼的一件事是每个对象都重复指定"additionalProperties": false. 我想在顶层指定一次,JSON 文档中的任何位置都不允许模式中未指定的任何属性。
那可能吗?
在最新草案 (2019-09) 中,您可以通过定义所有模式派生自的“基本模式”来实现此目的:
{
$defs: {
base_object: {
unevaluatedProperties: false
},
},
$ref: '#/$defs/base_object',
type: 'object',
// additionalProperties: false does not need to be stated here
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2185 次 |
| 最近记录: |