JSON架构" oneOf"用于验证密钥的存在

时间:2017-06-11 15:34:10

标签: json jsonschema

我正在尝试创建一个JSON模式,该模式可以针对多个不同的实体进行验证,这些实体具有大部分相同的属性,但只有少数几个属性不同。

self.getUsers = function () {
    $.get("/API/Users/GetUsers/");
}

基本上我想创建一个模式,确保姓氏为{ "firstname": "Bat", "lastname": "man", "email": "batman@gmail.com" } { "firstname": "Super", "lastname": "man", "phone": "543-453-4523" } { "firstname": "Wonderwo", "lastname": "man", "email": "wonderwoman@gmail.com" } ,并且具有"man"phone属性。

我尝试使用email来实现此功能,如下所示:

oneOf

但我认为这不行。使用JSON模式甚至可以实现这样的功能吗?我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:4)

你有几个问题:

  1. " oneOf"是一个关键字,不能在属性中使用。
  2. 内部物品" oneOf"应该是模式,你没有的模式。
  3. " anyOf"几乎总是优于" oneOf",除非你真的需要一个独家" OR"
  4. "模式"这里是一个错误的关键字,你需要" enum" (或草案06" const")
  5. 你需要:

    {
      "type": "object",
      "required": ["firstname", "lastname"],
      "properties": {
        "firstname": {
          "type": "string"
        },
        "lastname": {
          "type": "string",
          "enum": ["man"]
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        }
      },
      "anyOf": [
        { "required": ["email"] },
        { "required": ["phone"] }
      ]
    }