在json模式中定义键值对的正确方法是啥
Posted
技术标签:
【中文标题】在json模式中定义键值对的正确方法是啥【英文标题】: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"
?您的示例数据中没有数组。
【参考方案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
可以接收一个对象。本网站的其他答案中提出了更复杂的解决方案。以上是关于在json模式中定义键值对的正确方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
将 json 格式的键值对转换为以符号为键的 ruby 哈希的最佳方法是啥?