如何在jsonschema中描述这个验证要求?

时间:2016-05-23 04:12:44

标签: json validation jsonschema

我想像这样验证我的API json响应:

{
  "code": 0,
  "results": [
     {"type":1, "abc": 123},
     {"type":2, "def": 456}
  ]
}

我想验证结果中的对象是否有" abc"字段的类型为1," def"类型为2时的字段。结果可能包含任意数量的type1和type2对象。

我可以在jsonschema中指定吗?或者我必须为results中的元素使用通用验证器并自己进行验证吗?

1 个答案:

答案 0 :(得分:1)

您可以使用anyOf关键字执行此操作。

  

如果针对此关键字的值定义的至少一个架构成功验证,则实例会针对此关键字成功验证。

http://json-schema.org/latest/json-schema-validation.html#anchor85

您需要定义两种类型的项目,然后使用anyOf来描述"结果"的数组项目。

{
  "type": "object",
  "properties": {
    "code": { "type": "integer" },
    "results": {
      "type": "array",
      "items": { "$ref": "#/definitions/resultItems" }
    }
  },
  "definitions": {
    "resultItems": {
      "type": "object",
      "anyOf": [
        { "$ref": "#/definitions/type1" },
        { "$ref": "#/definitions/type2" }
      ]
    },
    "type1": {
      "properties": {
        "type": { "enum": [1] },
        "abc": { "type": "integer" }
      },
      "required": ["abc"]
    },
    "type2": {
      "properties": {
        "type": { "enum": [2] },
        "def": { "type": "integer" }
      },
      "required": ["def"]
    }
  }
}