使用json-schema v4定义映射类型

时间:2014-03-12 17:15:00

标签: json map cassandra jsonschema

我正在尝试定义一个引用的架构,以用作带有文本字段的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枚举到枚举也是一种解决方案。那是可行的吗?

1 个答案:

答案 0 :(得分:1)

如果我可以被允许回答我自己的问题,我相信解决方案是使用PatternProperties定义作为密钥,使用非常具体的正则表达式。该值可以是json-schema支持的任何类型,包括另一个正则表达式。就我而言,它是一个枚举。

所以定义看起来像 -

  "patternProperties": {
    "^https:\/\/www.example.com\/auth\/\\w+$": {
      "type": "string",
      "enum": ["read_only", "read_write", "write_only"]
    }
  },
  "additionalProperties": false