我有一个要添加“格式”关键字的架构,但仅在某些情况下才可以。我有jsconschema草稿07,正在尝试使用if / else语句,但是,我想我开始意识到,使用if / else关键字时无法添加格式。
这是我的模式:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://json-schema.org/draft-07/schema#",
"title": "Core schema meta-schema",
"type": "object",
"additionalProperties": false,
"properties": {
"theToggler": {
"type": "string"
},
"mysession": {
"$ref": "#/definitions/mysession"
}
},
"definitions": {
"mysession": {
"type": "object",
"properties": {
"theID": {
"type": "string",
"example": "test@email.om",
"description": "no format"
}
}
}
},
"if": {
"theToggler": "testme"
},
"then": {
"definitions": {
"mysession": {
"type": "object",
"properties": {
"theID": {
"type": "string",
"format": "email"
}
}
}
}
}
}
这是我的输入内容:
{
"theToggler": "testme",
"mysession": {
"theID": "test"
}
}
您会认为这会抛出一个箭头(如果'theToggler'=“ testme”,则该ID应该带有@符号,因为我正在定义“电子邮件”格式。我是在做错什么,还是不支持此操作,还是看到其他我可能会想念的东西?
谢谢!
中对其进行测试答案 0 :(得分:0)
您遇到了许多问题。
首先,您似乎已使用元架构作为示例。很好,但是您不能重用元模式的$id
。您的架构必须具有唯一的$id
或根本没有。
if
和then
关键字必须是架构。如果实例针对if
模式有效,则then
模式也必须有效。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": false,
"properties": {
"theToggler": { "type": "string" },
"mysession": { "$ref": "#/definitions/mysession" }
},
"allOf": [
{
"if": { "$ref": "#/definitions/thetoggler-is-testme" },
"then": { "$ref": "#/definitions/mysession-id-is-an-email" }
}
],
"definitions": {
"mysession": {
"type": "object",
"properties": {
"theID": {
"type": "string",
"example": "test@email.om",
"description": "no format"
}
}
},
"thetoggler-is-testme": {
"properties": {
"theToggler": { "const": "testme" }
}
},
"mysession-id-is-an-email": {
"properties": {
"mysession": {
"properties": {
"theID": { "format": "email" }
}
}
}
}
}
}