需要一个允许在数组的对象项上具有逻辑条件的Json Schema

时间:2016-11-03 19:44:25

标签: json validation jsonschema

我有类型为array的类型的Json属性,其类型为object;它对应于一个或多个驱动程序存在一个且只有一个主驱动程序且零或任意数量的非主驱动程序的情况:

{
        "driver": [
          {
            "driverId": 12839,
            "isPrimary": true
          },
          {
            "driverId": 23843,
            "isPrimary": false
          }
        ],
}
仅当满足以下所有要求时,

"driver"属性才有效:

    每个项目的
  1. driverId应该是唯一的。
  2. 只允许一个项目"isPrimary": true
  3. 必须有一个且只有一个"isPrimary": true的项目; "isPrimary": false
  4. 可以有零个或任意数量的项目

    现在我正在寻找实现上述要求的Json Schema;以下是有效的"driver"示例:

    1.
        {                                                   
                "driver": [       
                  {
                    "driverId": 12839,
                    "isPrimary": true
                  }
                ]
        }
    2.
        {                                                   
                "driver": [       
                  {
                    "driverId": 12812,
                    "isPrimary": true
                  },
              {
                    "driverId": 38849,
                    "isPrimary": false
                  },
              {
                    "driverId": 34323,
                    "isPrimary": false
                  }
                ]
        }
    

    以下示例将无法通过验证:

      1.
            {                                                   
                    "driver": [       
                      {
                        "driverId": 12839,
                        "isPrimary": false
                      }
                    ]
            }
        2.
            {                                                   
                    "driver": [       
                      {
                        "driverId": 12839,
                        "isPrimary": false
                      },       
                      {
                        "driverId": 34564,
                        "isPrimary": false
                      }
                    ]
            }
        3.
            {                                                   
                    "driver": [       
    
                    ]
            }
    

1 个答案:

答案 0 :(得分:0)

JSON架构不支持此类要求。

根据验证者的不同,您可以将此要求作为自定义关键字实施(例如,在Ajv的JavaScript中 - 我是作者)。