我希望编写一个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"}
]
}
任何帮助或指向相关示例的链接都会很棒。感谢。
答案 0 :(得分:4)
使用json-schema draft 4,您可以使用additionalProperties关键字指定您可以在结果对象中接收的任何新属性的架构。
"result" : {
"type" : "object"
"additionalProperties" : {
"type" : "number"
}
}
如果您可以限制允许的密钥名称,那么您可以使用" patternProperties"关键字和正则表达式,用于限制授予的密钥名称。
请注意,在json-schema draft 4" required"必须是一个与对象有界的数组,而不是每个属性。