【问题标题】:Json schema validade for complex structure复杂结构的 Json 模式验证
【发布时间】:2015-04-08 19:53:41
【问题描述】:

您好我需要帮助来生成一个json模式来验证一个表单,下面的例子是一个成员数组,有很多成员类型,类型1是一个

项目经理,类型 2 系统分析师和类型 3 是开发人员。我需要验证项目是否包含以下成员列表: 类型 1 的最小 1 和最大 1; 最小 1 最大 2 类型 2; 类型 3 的最小 2 最大 2。

 {
"members": [
    {
        "memberid": 1,
        "membername": "John",
        "type": 1
    },
    {
        "memberid": 2,
        "membername": "Jack",
        "type": 2
    },
    {
        "memberid": 3,
        "membername": "Peter",
        "type": 3
    },
    {
        "memberid": 4,
        "membername": "Jorge",
        "type": 3
    },
    {
        "memberid": 5,
        "membername": "Clay",
        "type": 3
    }
]

}

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

    这是一个艰难的过程。此解决方案的唯一限制是它要求成员按特定顺序排列。此外,如果将来需要其他组合,架构可能会失控。

    {
      "type": "object",
      "properties": {
        "members": { "$ref": "#/definitions/members" }
      },
      "definitions": {
        "members": {
          "oneOf": [
            { "$ref": "#/definitions/smallTeam" },
            { "$ref": "#/definitions/largeTeam" }
          ]
        },
        "smallTeam": {
          "type": "array",
          "items": [
            { "$ref": "#/definitions/projectManager" },
            { "$ref": "#/definitions/systemAnalyst" },
            { "$ref": "#/definitions/developer" },
            { "$ref": "#/definitions/developer" }
          ],
          "additionalItems": false
        },
        "largeTeam": {
          "type": "array",
          "items": [
            { "$ref": "#/definitions/projectManager" },
            { "$ref": "#/definitions/systemAnalyst" },
            { "$ref": "#/definitions/systemAnalyst" },
            { "$ref": "#/definitions/developer" },
            { "$ref": "#/definitions/developer" }
          ],
          "additionalItems": false
        },
        "projectManager": {
          "type": "object",
          "allOf": [{ "$ref": "#/definitions/member" }],
          "properties": {
            "type": { "enum": [1] }
          }
        },
        "systemAnalyst": {
          "type": "object",
          "allOf": [{ "$ref": "#/definitions/member" }],
          "properties": {
            "type": { "enum": [2] }
          }
        },
        "developer": {
          "type": "object",
          "allOf": [{ "$ref": "#/definitions/member" }],
          "properties": {
            "type": { "enum": [3] }
          }
        },
        "member": {
          "type": "object",
          "properties": {
            "memberid": { "type": "integer" },
            "membername": { "type": "string" }
          },
          "required": ["memberid", "membername", "type"]
        }
      }
    }
    

    你能控制这个结构吗?如果有点不同,描述起来会容易得多。

    {
      "type": "object",
      "properties": {
        "projectManager": { "$ref": "#/definitions/member" },
        "systemAnalyst": {
          "type": "array",
          "items": { "$ref": "#/definitions/member" },
          "minItems": 1,
          "maxItems": 2
        },
        "developer": {
          "type": "array",
          "items": { "$ref": "#/definitions/member" },
          "minItems": 1,
          "maxItems": 2
        }
      },
      "definitions": {
        "member": {
          "type": "object",
          "properties": {
            "memberid": { "type": "integer" },
            "membername": { "type": "string" }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-05
      • 2020-01-20
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多