2014-12-08 11 views
7

Ho un oggetto JSON che può contenere qualsiasi numero di oggetti nidificati con data specifica, ad esempio:Dizionario simile schema JSON

{ 
    "Bob": { 
    "age": "42", 
    "gender": "male" 
    }, 
    "Alice": { 
    "age": "37", 
    "gender": "female" 
    } 
} 

E vorrei avere uno schema che assomiglia a:

{ 
    "type": "object", 
    "propertySchema": { 
    "type": "object", 
    "required": [ 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

So che posso trasformarlo in array e spingere il 'nome' all'interno degli oggetti. In tal caso il mio schema sarebbe simile a:

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "required": [ 
     "name", 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "name": { 
     "type": "string" 
     }, 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

ma mi piacerebbe avere una struttura simile a un dizionario. È possibile fare questo schema?

risposta

17

additionalProperties è la parola chiave:

{ 
    "type" : "object", 
    "additionalProperties" : { 
     "type" : "object", 
     "required" : [ 
      "age", 
      "gender" 
     ], 
     "properties" : { 
      "age" : { 
       "type" : "string" 
      }, 
      "gender" : { 
       "type" : "string" 
      } 
     } 
    } 
} 

additionalProperties possono avere i seguenti valori con significati diversi:

  • "additionalProperties": false Non più le proprietà sono consentiti a tutti.
  • "additionalProperties": true Sono consentite altre proprietà. Questo è il comportamento predefinito.
  • "additionalProperties": {"type": "string"} Sono consentite ulteriori proprietà (di nome arbitrario), se hanno valore di tipo dato ("stringa" qui).
  • "additionalProperties": {*any schema*} Le proprietà aggiuntive devono soddisfare lo schema fornito, come nell'esempio sopra riportato.
+0

Grazie per la bella risposta. Ho aggiunto poche righe che spiegano diversi significati di "additionalProperties". –

+0

Grazie a @JanVlcinsky per migliorare la risposta (anche se l'uso di titoli per gli estratti di codice sembra un po 'eccessivo per me). – jruizaranguren

+0

Sentiti libero di modificarlo come preferisci. Questa è stata la ragione per cui ti ho notificato. Io uso spesso le intestazioni per fornire informazioni chiave in un modo un po 'più visivo, ma a volte può sembrare un po' troppo, sono d'accordo. –