如何在JSON模式中的字段上切换大小写?

时间:2018-10-22 16:43:18

标签: jsonschema python-jsonschema

我正在使用Python的jsonschema来验证JSON记录。这是一个示例架构。这里只有两个案例,但请想象一个类似的场景,其中有一百个这样的案例。

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "oneOf": [
      {
        "type": "object",
        "required": ["a", "b", "c"],
        "properties": {
          "a": {"type": "integer", "enum": [0]},
          "b": {"type": "integer", "enum": [0, 2, 4, 6, 8]},
          "c": {"type": "string", "enum": ["always the same"]}
        }
      },
      {
        "type": "object",
        "required": ["a", "b", "c"],
        "properties": {
          "a": {"type": "integer", "enum": [1]},
          "b": {"type": "integer", "enum": [1, 3, 5, 7, 9]},
          "c": {"type": "string", "enum": ["always the same"]}
        }
      }
    ]
}

关键问题是"c"字段的重复。我希望能够切换大小写"a",以验证相应的"b",但是让"c"始终保持不变。我不想拼写"c"一百次。这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,可以做到。实际上,优良作法是只放入anyOf / oneOf发生变化的部分。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "c": { "const": "always the same" }
  },
  "required": ["a", "b", "c"],
  "anyOf": [
    {
      "properties": {
        "a": { "const": 0 },
        "b": { "enum": [0, 2, 4, 6, 8] }
      }
    },
    {
      "properties": {
        "a": { "const": 1 },
        "b": { "enum": [1, 3, 5, 7, 9] }
      }
    }
  ]
}