【问题标题】:Using jsonschema to validate that a key has a unique value within an array of objects?使用 jsonschema 验证键在对象数组中是否具有唯一值?
【发布时间】:2018-04-17 20:21:38
【问题描述】:

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

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

由于唯一的描述键,在 test_array 上使用 uniqueItems 将不起作用。

【问题讨论】:

  • 目前你不能。对不起。随时在 JSON Schema 规范 repo 上记录问题。
  • Echoing Relequestual,(目前)不可能。 JSON Schema 侧重于进行结构断言(“描述必须是字符串”),而不是数据之间的关系(“名称不能被任何其他文档/对象使用”)。

标签: json jsonschema


【解决方案1】:

我找到了使用允许任意属性的模式的替代方法。唯一需要注意的是 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"]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2022-11-21
    相关资源
    最近更新 更多