gpt4 book ai didi

jsonschema - Json 模式动态 key 验证

转载 作者:行者123 更新时间:2023-12-04 01:59:14 24 4
gpt4 key购买 nike

面临架构验证问题。

架构:

{
"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}$"

当您将鼠标悬停在验证器顶部的链接上时,它会导致您可以看到的错误:

enter image description here

它应该是:
"^[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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com