【发布时间】:2021-12-03 10:04:56
【问题描述】:
我正在尝试使用 tv4 验证我的 JSON 架构。
它正在工作并且验证返回True。
但是,就我而言,JSON 集合 "first, second, and third" 不会一直可用。
在这种情况下如何编写架构?
我的 JSON 数据
{
"checked": "OK",
"result": {
"first": {
"label": "First Label",
"value": 1
},
"second": {
"label": "second Label",
"value": 34
},
"third": {
"label": "Third Label",
"value": 28
}
}
}
JSON 架构
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://example.com/example.json",
"type": "object",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": {},
"required": [
"checked",
"result"
],
"properties": {
"checked": {
"$id": "#/properties/checked",
"type": "string",
"title": "The checked schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"OK"
]
},
"result": {
"$id": "#/properties/result",
"type": "object",
"title": "The result schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"required": [
"first",
"second",
"third"
],
"properties": {
"first": {
"$id": "#/properties/result/properties/first",
"type": "object",
"title": "The first schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{
"label": "First Label",
"value": 1
}
],
"required": [
"label",
"value"
],
"properties": {
"label": {
"$id": "#/properties/result/properties/first/properties/label",
"type": "string",
"title": "The label schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"First Label"
]
},
"value": {
"$id": "#/properties/result/properties/first/properties/value",
"type": "integer",
"title": "The value schema",
"description": "An explanation about the purpose of this instance.",
"default": 0,
"examples": [
1
]
}
},
"additionalProperties": true
},
"second": {
"$id": "#/properties/result/properties/second",
"type": "object",
"title": "The second schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{
"label": "second Label",
"value": 34
}
],
"required": [
"label",
"value"
],
"properties": {
"label": {
"$id": "#/properties/result/properties/second/properties/label",
"type": "string",
"title": "The label schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"second Label"
]
},
"value": {
"$id": "#/properties/result/properties/second/properties/value",
"type": "integer",
"title": "The value schema",
"description": "An explanation about the purpose of this instance.",
"default": 0,
"examples": [
34
]
}
},
"additionalProperties": true
},
"third": {
"$id": "#/properties/result/properties/third",
"type": "object",
"title": "The third schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{
"label": "Third Label",
"value": 28
}
],
"required": [
"label",
"value"
],
"properties": {
"label": {
"$id": "#/properties/result/properties/third/properties/label",
"type": "string",
"title": "The label schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"Third Label"
]
},
"value": {
"$id": "#/properties/result/properties/third/properties/value",
"type": "integer",
"title": "The value schema",
"description": "An explanation about the purpose of this instance.",
"default": 0,
"examples": [
28
]
}
}
}
}
}
}
}
【问题讨论】:
-
json-schema.org/understanding-json-schema 是一个很好的资源,我建议您通读以了解有关 JSON Schema 的更多信息。
-
我强烈建议您不要使用您用来生成该架构的网站。众所周知,创建错误的模式会在某些情况下导致问题和混乱。您需要删除所有
$id、title、description和default。 -
我注意到您的架构声明它使用 Draft-07,但 tv4 仅支持 Draft-03 和 Draft-04。您需要找到支持较新版本的验证器,或者更改
$schema声明。
标签: jsonschema tv4