使用jsonschema验证一个键在对象数组中具有唯一值?

6

如何使用jsonschema验证JSON,在对象数组中,每个对象中的特定键必须是唯一的?例如,验证每个名称k-v对的唯一性应该失败:

"test_array": [
    {
        "Name": "name1",
        "Description": "unique_desc_1"
    },
    {
        "Name": "name1",
        "Description": "unique_desc_2"
    }
]

在test_array上使用uniqueItems是不起作用的,因为有唯一的Description键。


目前你不能这样做。很抱歉。请随意在JSON Schema规范存储库上记录问题。 - Relequestual
回应Relequestual,目前还不可能。JSON Schema的重点是进行结构断言(“描述必须是字符串”),而不是数据之间的关系(“名称不能被任何其他文档/对象使用”)。 - awwright
1个回答

2

我找到了一种使用模式的替代方法,该模式允许任意属性。唯一的注意事项是JSON允许重复的对象键,但重复会覆盖它们之前的实例。具有“名称”键的对象数组可以转换为具有任意属性的对象:

例如,以下JSON:

"test_object": {
    "name1": {
        "Desc": "Description 1"
    },
    "name2": {
        "Desc": "Description 2"
    }
}

以下是该架构:

{
    "type": "object",
    "properties": {
        "test_object": {
            "type": "object",
            "patternProperties": {
                "^.*$": {
                    "type": "object",
                    "properties": {
                        "Desc": {"type" : "string"}
                    },
                    "required": ["Desc"]
                }
            },
            "minProperties": 1,
            "additionalProperties": false
        }
    },
    "required": ["test_object"]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接