在JSON模式中动态定义枚举

时间:2016-12-10 20:04:47

标签: json jsonschema

给出以下JSON文档

{
    "nodes": [
        {
            "name": "Arbitrary"
        },
        {
            "name": "String"
        },
        {
            "name": "Allowed"
        }
    ],
    "edges": [
        {
            "tail": "Arbitrary",
            "head": "Strings"
        },
        {
            "tail": "Strings",
            "head": "Allowed"
        }
    ]
}

有没有办法通过JSON模式表达,tail中的headedge的值只能采用name键定义的值node

我对描述edges的直觉就像是

{
    "type": "array",
    "items": {
        "type": "object",
        "properties":{
            "tail": {
                "enum": {
                    "$ref": "#/nodes/*/name"
                },
            },
            "head": {
                "enum": {
                    "$ref": "#/nodes/*/name"
                },
            }
        }
    }
}

但JSON Pointer显然不允许在引用路径*中使用通配符(#/nodes/*/name)。

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。 According to the last draft

5.20。枚举

此关键字的值必须是数组。这个数组应该至少有一个元素。数组中的元素应该是唯一的。

数组中的元素可以是任何类型,包括null。

如果某个实例的值等于此关键字的数组值中的某个元素,则该实例会成功验证此关键字。