【发布时间】:2019-08-26 10:00:55
【问题描述】:
我有以下使用 JSON 模式的用例。我有一个设置的元数据对象。在我们的例子中,设置可以是 string/real/integer/boolean 类型。
在这个对象中,我有 4 个字段:默认/最小值/最大值,每个字段都定义了设置的一个属性。 现在我想要实现的是,当de默认值的类型是整数时,最小/最大值也是整数。
到目前为止我想出的架构:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"setting-value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"setting-meta": {
"type": "object",
"required": [
"name",
"type",
"default"
],
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"Real",
"Integer",
"Boolean",
"String"
]
},
"minimum": {
"$ref": "#/definitions/setting-value"
},
"maximum": {
"$ref": "#/definitions/setting-value"
},
"default": {
"$ref": "#/definitions/setting-value"
},
"value": {
"$ref": "#/definitions/setting-value"
}
}
}
}
}
在这里,#/definitions/setting-meta 可以支持不同的类型。但是它并没有定义如果例如 TYPE 的值等于 Real/Integer,那么 minimum/maximum/default/value 的类型都应该是 number 类型。
我会使用这些定义如下
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$ref": "schema-definition-above.json#/definitions/setting-meta"
}
根据当前架构,以下所有示例都是有效的,但是它们应该是有效/无效的:
有效的 JSON 对象:
{
"name": "Enabled",
"type": "Boolean",
"minimum": false,
"maximum": true,
"default": true,
"value": true
}
无效的json对象,最小值/最大值/默认值不一样:
{
"name": "Enabled",
"type": "Boolean",
"minimum": false,
"maximum": 1,
"default": "value",
"value": true
}
无效的 json 对象:类型,与值的实际类型不匹配
{
"name": "Enabled",
"unit": "enabled/disabled",
"configId": "Accumulator",
"displayName": "Enable or disable this machine",
"type": "Integer",
"minimum": false,
"maximum": true,
"default": true,
"value": true
}
我的问题: 是否可以将这些类型的依赖项放入 JSON 模式?到目前为止,我发现的唯一一种依赖关系是属性依赖关系,表明如果设置了一个属性,则还应该设置另一个属性。
任何帮助将不胜感激。
编辑: 使用一些 JSON 对象扩展了该用例,这些对象应该使用引用的架构进行验证或无效。
【问题讨论】:
-
目前您的架构只有定义。您能否修改它以具有一些验证约束?那我可以帮忙。如果您还提供一些您希望有效和无效的示例,我可以更快地提供帮助
-
您好 Relequestual,感谢您的回复。我按照您的建议添加了一些示例,希望这可以使问题更加清晰。
标签: json jsonschema