面临架构验证问题。
架构:
{
"type": "object",
"$schema": "http://json-schema.org/draft-03/schema",
"id": "#",
"required": true,
"patternProperties": {
"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$": {
"type": "object",
"required": true,
"properties": {
"_from": {
"id": "_from",
"type": "string",
"required": true
},
"message": {
"type": "object",
"id": "message",
"properties": {
"detail": {
"type": "string",
"id": "detail",
"required": true
},
"from": {
"type": "string",
"id": "from",
"required": true
}
}
}
}
}
}
}
json:
{
"tom@example.com": {
"_from": "giles@gmail.com",
"message": {
"from": "Giles@gmail.com",
"detail": "AnyonewanttomeetmeinParis"
}
},
"harry@example.com": {
"_from": "giles@gmail.com",
"message": {
"from": "Giles@gmail.com",
"detail": "AnyonewanttomeetmeinParis"
}
}
}
这里的关键电子邮件地址是动态的,不知何故它不会验证正则表达式以进行电子邮件验证。
您能否建议我更正架构。
我正在验证使用:http://json-schema-validator.herokuapp.com/index.jsp
最佳答案
我在您的模式中看到您似乎忘记转义某些字符或没有正确执行:
"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$"
当您将鼠标悬停在验证器顶部的链接上时,它会导致您可以看到的错误:
它应该是:
"^[A-Z0-9\\._%\\+-]+@[A-Z0-9\\.-]+\\.[A-Z]{2,6}$"
或者不转义内部/类字符,但我会使用第一个模式,因为我认为它的意图更清晰:
"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$"
你需要有两个
\
因为第一个 \
是第二个 \
的转义.如果只有一个它就行不通了,因为没有 escape sequence喜欢 \.
或 \+
在 JavaScript 中。你想要一个 \
在模式本身。但是 json 架构
patternProperties
默认情况下区分大小写,因此您需要通过添加 a-z
来扩展您的电子邮件模式给它:"^[A-Za-z0-9\\._%\\+-]+@[A-Za-z0-9\\.-]+\\.[A-Za-z]{2,6}$"
(我没有找到任何其他方式使其不区分大小写)
您还需要通过添加
"additionalProperties": false
来排除任何其他属性名称。旁边patternProperties
否则它会捕获与模式不匹配的所有其他内容。工作模式应该如下所示:
{
"type": "object",
"$schema": "http://json-schema.org/draft-03/schema",
"id": "#",
"required": true,
"patternProperties": {
"^[A-Za-z0-9\\._%\\+-]+@[A-Za-z0-9\\.-]+\\.[A-Za-z]{2,6}$": {
"type": "object",
"required": true,
"properties": {
"_from": {
"id": "_from",
"type": "string",
"required": true
},
"message": {
"type": "object",
"id": "message",
"properties": {
"detail": {
"type": "string",
"id": "detail",
"required": true
},
"from": {
"type": "string",
"id": "from",
"required": true
}
}
}
}
}
},
"additionalProperties": false
}
我已经测试过了:http://jsonschemalint.com/
关于jsonschema - Json 模式动态 key 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705522/