【问题标题】:What is the Correct way to define key-value pairs in json schema在json模式中定义键值对的正确方法是什么
【发布时间】:2015-01-06 23:58:33
【问题描述】:

如何在 json 模式中定义键值对对象(“正确”方式)?

我想定义这个:

"id" : 99,
_info : {
    "name" : "somename",
    "href" : "someUrl"
}

以下两项是否准确?:

1)

{
    "type": "object",
    "name": "MyObj",
    "properties": {
        "id": {
            "type": "integer"
        },
        "_info": {
            "type": "array",
            "items": {
                "type": "object"
                "properties": {
                    "key": {
                        "type": "string",
                        "description": "key"
                    },
                    "value": {
                        "type": "string",
                        "description": "the value"
                    }
                }
            }
        }
    }
}

2)

{
    "type": "object",
    "name": "MyObj",
    "properties": {
        "id": {
            "type": "integer",
        "_info": {
            "type": "object",
            "additionalProperties": {
                "type": "string",
                "description": "string values"
            }
        }
    }
}

完成此任务的正确方法是什么?人们会知道架构是什么以及对象在序列化/反序列化时的样子?

【问题讨论】:

  • 问题是什么?
  • 为什么在选项 1 中使用"type": "array"?您的示例数据中没有数组。

标签: json json.net schema jsonschema


【解决方案1】:

在 JSON 中,对象已经是键值对的集合。你不需要任何特殊的东西来定义它:

{
    "_info":{"type":"object"}
}

您可以从这里添加约束。

  • 如果您知道键的名称,请将它们添加到“属性”中
  • 如果您知道所有可能的键,则将“additionalProperties”设置为 false
  • 如果要限制可能的键名,请使用“patternProperties”。

2019/09/10 更新

按照 cmets 的建议,如果你想将所有属性限制为字符串类型,你可以这样做:

{
  "title": "Force every property to have a string value",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": {"type": "string"}
}

【讨论】:

  • 好吧,但这并不将值限制为字符串。看看 Gustavo 的模式尝试,看起来这就是他想要的……
  • @tpei,我已经修改了答案以解决您的问题。
  • 这太棒了。不知道additionalProperties 可以接收一个对象。本网站的其他答案中提出了更复杂的解决方案。
猜你喜欢
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多