我有以下JSON输出数据:
{
"label_name_0" : 0,
"label_name_5" : 3,
.
.
.
"label_name_XXX" : 4
}
Run Code Online (Sandbox Code Playgroud)
输出很简单:与整数值关联的键[1]名称.如果密钥名称没有改变,我可以轻松地提出类似于这样的JSON Schema:
{
"type": "array"
"title": "Data output",
"items" :{
"properties": {
"label_name": {
"type": "integer",
"default": 0,
"readonly": True,
}
}
},
Run Code Online (Sandbox Code Playgroud)
由于密钥名称本身未知且不断变化,因此我必须为其设计模式.我唯一知道的是密钥是string不超过100个字符.如何为lable_name_xxx不断更改的键定义JSON模式.
[1]不确定我是否使用了正确的术语
Kon*_*che 34
在json-schema.org上,您可以在" 高级示例"部分找到适合的内容.你可以patternProperties在里面定义一个object.
{
"type": "object",
"properties": {
"/": {}
},
"patternProperties": {
"^(label_name_[0-9]+)+$": { "type": "integer" }
},
"additionalProperties": false,
}
Run Code Online (Sandbox Code Playgroud)
正则表达式(label_name_[0-9]+)+应该符合您的需求.在JSON Schema中,正则表达式使用^和显式锚定$.正则表达式定义,必须至少有一个property(+).该物业包括label_name_之间的一个数字0和9,而必须有至少一个数字([0-9]+),但也可以任意很多.
通过设置additionalProperties为false约束对象属性以匹配正则表达式.
pin*_*man 16
正如Konrad的回答所述,请使用patternProperties.但是使用代替properties,这是不需要的,我认为康拉德刚从他的参考例中粘贴了一个期望从一开始的路径/.在下面的示例中,模式匹配regex .*接受任何属性名称,我只允许使用字符串或null类型"additionalProperties": false.
"patternProperties": {
"^.*$": {
"anyOf": [
{"type": "string"},
{"type": "null"}
]
}
},
"additionalProperties": false
Run Code Online (Sandbox Code Playgroud)
mrt*_*rsn 15
比patternProperties更简单的解决方案,因为OP对键名没有任何要求(文档):
{
"type": "object",
"additionalProperties": {
"type": "integer",
"default": 0,
"readonly": true,
}
}
Run Code Online (Sandbox Code Playgroud)
default并readonly包含在内,因为它们已包含在OP的最初建议中,但它们不是必需的。
| 归档时间: |
|
| 查看次数: |
8001 次 |
| 最近记录: |