如何在Json Schema中定义单个唯一的键值对?

时间:2012-09-05 10:55:11

标签: json jsonschema

架构应该只允许以下星座:{"status":"nok"}。 密钥必须始终为“状态”,值应允许“ok”,“nok”,“inProgress” 没有差异或额外的对象,......应该被允许

我试过这个:

{
"description": "blabla",
"type": "object",
"properties": {
    "status": {
        "type": "string",
        "enum": [
            "ok",
            "inProgress",
            "nok"
        ],
        "required": true,
        "additionalItems": false
    }
},
"required": true,
"additionalProperties": false
}

这有效,但是这个方案允许我可以发送两次相同的键/值对,如{"status":"nok","status":"nok"} 如果没有我正在使用的“对象”容器,我会很高兴,因为减少了开销。 也许有人知道解决方案,谢谢

1 个答案:

答案 0 :(得分:0)

该输入存在一个更基本的问题:

{"status":"nok","status":"nok"}

主要是:输入无效JSON RFC 4627,第2.2节,明确指出“对象中的名称应该是唯一的”。在你的情况下,他们不是。

这意味着您使用的JSON解析器可以使用此类输入执行任何操作。一些JSON API将首先获取它们所获得的任何值,其他解析器将获取它们读取的最后一个值,其他解析器甚至会合并值 - 根据RFC,这些都不是非法的。

实质上:给定这样的输入,你不能保证JSON解析器的输出将是什么;因此,您无法保证此类输入的JSON Schema验证。