如何编写json模式来强制其他属性的条件存在?

如何编写json模式来强制其他属性的条件存在?,json,jsonschema,json-schema-validator,Json,Jsonschema,Json Schema Validator,模式应该验证以下json对象,并且不允许任何附加属性 { "id": "11111111111111111111111111111111", "status": "employed", "company_name": "Google" } { "id": "00000000000000000000000000000000", "status": "unemployed" } 模式草案v4: { "type": "object", "additionalProper

模式应该验证以下json对象,并且不允许任何附加属性

{
  "id": "11111111111111111111111111111111",
  "status": "employed",
  "company_name": "Google"
}

{
  "id": "00000000000000000000000000000000",
  "status": "unemployed"
}
模式草案v4:

{
  "type": "object",
  "additionalProperties":false,
  "required": [
    "status",
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum":["unemployed", "employed"]
    },
    "company_name": {
      "type": "string"
    }
  },
  "dependencies": {
    "company_name": {
      "properties": {
        "status": {
          "enum": [
            "employed"
          ]
        }
      }
    }
  }
}
此模式看起来不错,但不会使以下json对象无效

{
  "id": "00000000000000000000000000000001",
  "status": "employed"
}
它应该无效,因为“状态”为“已雇用”,但未提供所需的属性“公司名称”。

这可以使用,但不确定如何使用


多亏了。

看@esp那边不清楚。。请你详细说明一下好吗。根据我的观察:我用的是最后一个(最好的):)我有什么不对劲吗missing@esp我补充了一个答案。请为如何使用依赖项添加另一个答案。我认为这是不可能的。它要么是任意的,要么是有条件的
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "status",
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "unemployed",
        "employed"
      ]
    },
    "company_name": {
      "type": "string"
    }
  },
  "anyOf": [
    {
      "properties": {
        "status": {
          "enum": [
            "employed"
          ]
        }
      },
      "required": [
        "company_name"
      ]
    },
    {
      "properties": {
        "status": {
          "enum": [
            "unemployed"
          ]
        }
      },
      "not": {
        "required": [
          "company_name"
        ]
      }
    }
  ]
}