json模式用于类似对象的映射

时间:2014-12-08 12:27:35

标签: json jsonschema

我希望编写一个json架构来涵盖这个(简化的)示例

{
    "errorMessage": "",
    "nbRunningQueries": 0,
    "isError": False,
    "result": {
        "foo": {"price":10.0, "country":"UK"},
        "bar": {"price":100.2, "country":"UK"}
    }
}

可以有这个非常简单的根模式

schema = {
    "type":"object",
    "required":True,
    "properties":{
        "errorMessage": {"type":"string", "required":True},
        "isError": {"type":"boolean", "required":True},
        "nbRunningQueries": {"type":"number", "required":True},
        "result": {"type":"object","required":True}
    }
}

并发症是结果{}元素。与标准模式不同,结果将是一个相同对象的数组 - 每个都有一个id字段或类似字符,这个响应模拟一个python字典,如下所示:

{
    "foo": {},
    "bar": {},
    ...
}

因此,如果a将获得灵活大小的结果对象而没有设置键,我该如何为此编写json模式?

我无法控制输入,或者我将其重写为

{
    "errorMessage": "",
    "nbRunningQueries": 0,
    "isError": False,
    "result": [
        {"id": "foo", "price":10.0, "country": "UK"},
        {"id": "bar", "price":100.2, "country":"UK"}
    ]
}

任何帮助或指向相关示例的链接都会很棒。感谢。

1 个答案:

答案 0 :(得分:4)

使用json-schema draft 4,您可以使用additionalProperties关键字指定您可以在结果对象中接收的任何新属性的架构。

"result" : {
    "type" : "object"
    "additionalProperties" : {
        "type" : "number"
    }
}

如果您可以限制允许的密钥名称,那么您可以使用" patternProperties"关键字和正则表达式,用于限制授予的密钥名称。

请注意,在json-schema draft 4" required"必须是一个与对象有界的数组,而不是每个属性。

相关问题