我正在尝试定义一个引用的架构,以用作带有文本字段的Cassandra CQL映射类型。具体来说,我想将URI映射到字符串。
现在我有:
"scope": {
"type": "object",
"properties": {
"uri": {
"type": "string",
"format": "uri"
},
"permission": {
"type": "string",
"enum": ["read_only", "read_write", "write_only"]
}
},
"required": ["uri", "permission"],
"additionalProperties": false
}
这适用于
等数据{"uri":"http://example.com",
"permission": "read_only"}
但我想要一个像
这样的数据的模式{"http://example.com": "read_only"}
http://spacetelescope.github.io/understanding-json-schema/reference/object.html有一个解决方案:
{
"type": "object",
"patternProperties": {
"^S_": { "type": "string" },
"^I_": { "type": "integer" }
}
}
这个问题是我必须使用正则表达式定义内置格式。查看URI的正则表达式示例让我想避免这种情况。
由于我拥有的URI数量有限,因此将enum枚举到枚举也是一种解决方案。那是可行的吗?
答案 0 :(得分:1)
如果我可以被允许回答我自己的问题,我相信解决方案是使用PatternProperties定义作为密钥,使用非常具体的正则表达式。该值可以是json-schema支持的任何类型,包括另一个正则表达式。就我而言,它是一个枚举。
所以定义看起来像 -
"patternProperties": {
"^https:\/\/www.example.com\/auth\/\\w+$": {
"type": "string",
"enum": ["read_only", "read_write", "write_only"]
}
},
"additionalProperties": false