Je souhaite avoir un schéma JSON avec des noms de propriété inconnus dans un tableau d'objets. Un bon exemple est la méta-donnée d’une page Web:
"meta": {
"type": "array",
"items": {
"type": "object",
"properties": {
"unknown-attribute-1": {
"type": "string"
},
"unknown-attribute-2": {
"type": "string"
},
...
}
}
}
Des idées s'il vous plaît, ou un autre moyen d'atteindre les mêmes?
Utilisez patternProperties
au lieu de properties
. Dans l'exemple ci-dessous, la correspondance de modèle regex .*
accepte n'importe quel nom de propriété et j'autorise les types string
ou null
uniquement à l'aide de "additionalProperties": false
.
"patternProperties": {
"^.*$": {
"anyOf": [
{"type": "string"},
{"type": "null"}
]
}
},
"additionalProperties": false
Vous pouvez créer des contraintes sur les propriétés non définies explicitement. Le schéma suivant impose "méta" à un tableau d'objets dont les propriétés sont de type chaîne:
{
"properties" : {
"meta" : {
"type" : "array",
"items" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
}
}
}
}
}
Si vous souhaitez simplement avoir un tableau de chaînes, vous pouvez utiliser le schéma suivant:
{
"properties" : {
"meta" : {
"type" : "array",
"items" : {
"type" : "string"
}
}
}
}
La solution de @jruizaranguren fonctionne pour moi. Même si je suis le même qui définit le schéma, j’ai choisi une autre solution
"meta": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
J'ai converti l'objet en un tableau d'objets nom-valeur . Exemple d'un fichier JSON valide:
"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"
}
]
]