JSON 架构重复属性

JSON schema duplicate properties

我对模式中的复制键有疑问。这是示例:

main.schema.json

{
    "$schema": "http://json-schema.org/draft-04/schema#", 

    "definitions": {
        "main.schema": {
            "properties": {
                "value": {
                    "description": "Status", 
                    "type": "boolean"
                }
            }, 
            "type": "object"
        }
    }, 
    "allOf": [
    {
        "$ref": "baseResource.json#/definitions/baseResource"
    }, 
    {
        "$ref": "#/definitions/main.schema"
    }
    ],
    "id": "main.schema.json#", 
    "required": [
        "value"
    ], 
    "title": "Title", 
    "type": "object"
}

baseResource.json

{
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "allOf": [
        {
            "$ref": "#/definitions/baseResource"
        }
    ], 
    "definitions": {
        "baseResource": {
            "properties": {
                "id": {
                    "description": "SomeDesc", 
                    "type": "string"
                }, 
                "value": {
                    "type": [
                        "string", 
                        "boolean"
                    ]
                }
            }, 
            "type": "object"
        }
    }, 
    "id": "baseResource.json#", 
    "required": [
        "id"
    ], 
    "title": "Base Resource", 
    "type": "object"
}

什么类型的值适合这个?值应该只是布尔值(根据主模式)或者可以是布尔值或字符串(引用正确的基础资源)。我正在使用 JSON 验证器,它不允许值是除布尔值以外的任何其他值,我在 JSON specyfication 中搜索了很多,但没有关于它的信息。

在这种情况下,value 必须是布尔值。

allOf 语句意味着 JSON 数据必须对所有列出的模式有效。

  • baseResouce 要求 value 为字符串或布尔值
  • main.schema 要求 value 为布尔值

JSON 对象对这两种模式都有效的唯一方法是它是布尔值。