在json模式中定义键值对的正确方法是什么

时间:2014-11-10 16:06:24

标签: json json.net schema jsonschema

如何在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 个答案:

答案 0 :(得分:4)

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

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

从这里你可以添加约束。

  • 如果您知道密钥的名称,则将其添加到“properties”
  • 如果您知道所有可能的键,则将“additionalProperties”设置为false
  • 如果要限制可能的键名,请使用“patternProperties”。