问题
I want to have a JSON Schema with unknown property names in an array of objects. A good example is the meta-data of a web page:
"meta": {
"type": "array",
"items": {
"type": "object",
"properties": {
"unknown-attribute-1": {
"type": "string"
},
"unknown-attribute-2": {
"type": "string"
},
...
}
}
}
Any ideas please, or other way to reach the same?
回答1:
Use patternProperties
instead of properties
. In the example below, the pattern match regex .*
accepts any property name and I am allowing types of string
or null
only by using "additionalProperties": false
.
"patternProperties": {
"^.*$": {
"anyOf": [
{"type": "string"},
{"type": "null"}
]
}
},
"additionalProperties": false
回答2:
You can make constraints on properties not explicitly defined. The following schema enforces "meta" to be an array of objects whose properties are of type string:
{
"properties" : {
"meta" : {
"type" : "array",
"items" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
}
}
}
}
}
In case you just want to have an array of strings, you may use the following schema:
{
"properties" : {
"meta" : {
"type" : "array",
"items" : {
"type" : "string"
}
}
}
}
回答3:
The Solution of @jruizaranguren works for me. Though I am the same who defines the schema, i choosed another solution
"meta": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
I converted the object to an array of name-value objects An example of a valid 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"
}
]
]
来源:https://stackoverflow.com/questions/32044761/json-schema-with-unknown-property-names