我有以下JSON输出数据:
{
"label_name_0" : 0,
"label_name_5" : 3,
.
.
.
"label_name_XXX" : 4
}
输出很简单:与整数值关联的键[1]名称。如果密钥名称没有改变,我可以很容易地提出类似于这样的JSON Schema:
{
"type": "array"
"title": "Data output",
"items" :{
"properties": {
"label_name": {
"type": "integer",
"default": 0,
"readonly": True,
}
}
},
由于密钥名称本身未知且不断变化,因此我必须为其设计模式。我唯一知道的是密钥是string
且不超过100个字符。如何为不断更改的键lable_name_xxx
定义JSON模式。
[1]不确定我是否使用了正确的术语
答案 0 :(得分:30)
在json-schema.org上,您会在Advanced Examples部分找到合适的内容。您可以在patternProperties
内定义object
。
{
"type": "object",
"properties": {
"/": {}
},
"patternProperties": {
"^(label_name_[0-9]+)+$": { "type": "integer" }
},
"additionalProperties": false,
}
正则表达式(label_name_[0-9]+)+
应该符合您的需求。在JSON Schema中,正则表达式使用^
和$
显式锚定。正则表达式定义必须至少有一个属性(+
)。该属性由label_name_
和0
与9
之间的数字组成,但必须至少有一个数字([0-9]+)
,但也可以有任意数量。{/ p>
通过将additionalProperties
设置为false
,它会约束对象属性以匹配正则表达式。
答案 1 :(得分:12)
正如Konrad的回答所述,请使用patternProperties
。但是请使用代替properties
,这是不需要的,我认为Konrad只是粘贴了他的参考示例,该示例期望以/
开头的路径。在下面的示例中,模式匹配regex .*
接受任何属性名称,我只允许"additionalProperties": false
使用字符串类型或null。
"patternProperties": {
"^.*$": {
"anyOf": [
{"type": "string"},
{"type": "null"}
]
}
},
"additionalProperties": false