我想在对象数组中有一个未知属性名称的JSON模式。一个很好的例子是网页的元数据:
"meta": {
"type": "array",
"items": {
"type": "object",
"properties": {
"unknown-attribute-1": {
"type": "string"
},
"unknown-attribute-2": {
"type": "string"
},
...
}
}
}
有什么想法吗,或者有什么方法可以达到同样的效果吗?
用patternProperties
代替properties
。在下面的示例中,模式匹配regex .*
接受任何属性名称,并且我仅通过使用"additionalProperties": false
允许string
或null
类型。
"patternProperties": {
"^.*$": {
"anyOf": [
{"type": "string"},
{"type": "null"}
]
}
},
"additionalProperties": false
…或者如果你只想让字符串出现在你的对象中(和原来的问题一样):
"patternProperties": {
"^.*$": {
{"type": "string"},
}
},
"additionalProperties": false
您可以对未显式定义的属性进行约束。下面的模式强制"meta"是一个属性为string类型的对象数组:
{
"properties" : {
"meta" : {
"type" : "array",
"items" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
}
}
}
}
}
如果你只想要一个字符串数组,你可以使用以下模式:
{
"properties" : {
"meta" : {
"type" : "array",
"items" : {
"type" : "string"
}
}
}
}
@jruizaranguren的解决方案对我很有效。虽然我是定义模式的人,但我选择了另一个解决方案
"meta": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
我将对象转换为名称-值对象数组一个有效的JSON示例:
"meta": [
[
{
"name": "http-equiv",
"value": "Content-Type"
},
{
"name": "content",
"value": "text/html; charset=UTF-8"
}
],
[
{
"name": "name",
"value": "author"
},
{
"name": "content",
"value": "Astrid Florence Cassing"
}
]
]