web-dev-qa-db-fra.com

Comment créer un schéma JSON pour la structure Nom/Valeur?

Mon problème est que je sérialise le contenu de la carte en JSON.

Dans la sortie (JSON), j'ai un objet qui suit la règle de syntaxe clé/nom.

La clé est créée à partir de la carte, et le nom de la valeur.

Exemple de modèle:

  class Storage {
       Map<String,String> values = new HashMap<>();

      {
         map.put("key1","key1");
         map.put("key2","key2");
         map.put("key3","key3");
      }

    }

Exemple d'objet JSON:

{
  key1=value1,
  key2=value2,
  key3=value3
}

Schéma JSON:

{
  "name": "storage",
  "description": "Store of key values",
  "properties": {
    // How can we describe the properties if we do not know the name ?
   }
}

Le problème est que je ne sais pas quelles seront les valeurs, mais je sais qu’il en sera.

Pouvez-vous m'aider à me fournir la définition complète du schéma?


Avertissement:

Je sais que cela peut être aussi sérialisé comme

 {
    values: [
       {key="key1", value="value1"},
       {key="key2", value="value2"},
       {key="key3", value="value3"}
    ]
 }

mais est ne veulent pas avoir tableau dans le JSON.

En supposant que votre validateur le supporte, vous pouvez utiliser patternProperties .

Pour le schéma ...

{
  "title": "Map<String,String>",
  "type": "object",
  "patternProperties": {
    ".{1,}": { "type": "string" }
  }
}

... et le document ...

{
    "foo":"bar",
    "baz":1
}

... la valeur de la propriété foo est valide car il s'agit d'une chaîne mais baz échoue à la validation car il s'agit d'un nombre.

20
McDowell

J'ai utilisé la solution suggérée par @augurar "AdditionalProperties": {"type": "string"}

pour AWS API Gateway Model .... et le SDK a pu générer la variable Map requise dans le SDK Java/Android

@Arne Burmeister - dans mon cas - la solution 1 n'a pas fonctionné comme prévu - bien qu'elle n'ait pas donné d'erreur dans le modèle (schéma créé)

0
Abdeali Chandanwala