在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​​ 哈希的最佳方法是啥?

Python字典键值对的添加和遍历

获取json键值对的对应字符串

将控件绑定到键值对的动态集合

从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象

pythonic在dict列表中查找公共键值对的方法