【问题标题】:How can i define a single, unique Key-Valuepair in JsonSchema?如何在 Json Schema 中定义一个唯一的键值对?
【发布时间】:2012-09-05 10:55:10
【问题描述】:

模式应该只允许以下星座:{"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"} 一样发送相同的键/值对两次 如果没有我正在使用的这个“对象”容器,我也会很高兴,因为它可以减少开销。 也许有人知道解决方案,谢谢

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

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

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

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

    这意味着您使用的 JSON 解析器可以对这样的输入执行任何操作。一些 JSON API 会抓取它们首先遇到的任何值,其他解析器会抓取它们读取的最后一个值,还有一些甚至会合并值——根据 RFC,这些都不是非法的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2015-11-22
      • 2020-05-28
      相关资源
      最近更新 更多