2015-06-25 8 views
5

Volevo impedire a un file json archiviato di consentire null come valore valido per esso. Provato usando la parola chiave non, ma senza fortuna.Convalida schema JSON per null quando "type" = "string"

Vuoi il json sotto per essere convalidato come falso, come il campo stats come valore null.

{ 
    "stats": "null" 
} 

si prega di trovare il mio schema di seguito: -

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://jsonschema.net#", 
    "type": "object", 
    "additionalProperties": false, 
    "maxProperties": 1, 
    "properties": { 
    "stats": { 
     "id": "http://jsonschema.net/stats#", 
     "type": "string", 
     "maxLength": 5, 
     "minLength": 2, 
     "additionalProperties": false, 
     "maxProperties": 1, 
     "not": {"type": "null"} 
    } 
    }, 

    "required": [ 
    "stats" 
    ] 
} 

Anche se ho dato "non": { "type": "null"}, ancora convalidato correttamente.

+0

Ho provato a convalidare con '{" stats ":" null "}' e non è riuscito. Come stai convalidando il tuo JSON? –

+0

Sei sicuro che sia "null" e non "null"? Perché questo è un valore String, non un valore "null" – Danielson

+0

Sto usando il codice java per convalidare il json, con jsonSchema.Ma sto verificando la convalida usando http://jsonschemalint.com/draft4/#, per testare molto più facilmente modo. – Manu

risposta

1

Wow. Tanta confusione qui.

Il problema è semplice:

{ 
    "stats": "null" 
} 

"null" è una stringa, quindi è valido (perché si consente stringhe). Questo non sarebbe stato permesso dal proprio schema, che funziona come ci si aspetta:

{ 
    stats: null 
} 

La risposta da Ashish Patil è sbagliato: nello schema (non i dati), quando si specifica il tipo, il nome del tipo è una stringa. La specifica di "not": {"type": null} non è valida. È specificare, ma che sarebbe ridondante come il precedente "type": "string" già implica quello.

La risposta accettata da jruizaranguren funziona perché non consente la stringa "null". Non affronta la confusione principale che null non è la stessa di "null".

2

È possibile utilizzare la parola chiave "enum" anziché "tipo". "null" non è un tipo json e json-schema valido.

Anche le proprietà aggiuntive e maxProperties sono inutili nella descrizione delle statistiche.

{ 
    "$schema" : "http://json-schema.org/draft-04/schema#", 
    "id" : "http://jsonschema.net#", 
    "type" : "object", 
    "additionalProperties" : false, 
    "maxProperties" : 1, 
    "properties" : { 
     "stats" : { 
      "id" : "http://jsonschema.net/stats#", 
      "type" : "string", 
      "maxLength" : 5, 
      "minLength" : 2 
      "not" : { 
       "enum" : ["null"] 
      } 

     } 
    }, 
    "required" : [ 
     "stats" 
    ] 
} 
+0

Grazie jruizaranguren. Funziona perfettamente – Manu

3

Prima di tutto, null non è una stringa. Quindi provare a utilizzare qui sotto nella tua schema--

"stats": { 
    "id": "http://jsonschema.net/stats#", 
    "type": "string", 
    "maxLength": 5, 
    "minLength": 2, 
    "additionalProperties": false, 
    "maxProperties": 1, 
    "not": {"type": null} 
} 

Ma, nel frammento di esempio che hai citato qualcosa come below--

{ "stats": "null" }

Quindi, se si voleva davvero nulla per essere non ammessi nel tuo file, il tuo file di esempio dovrebbe apparire come { "stats": null } Lungo lo schema che ho fornito.

Problemi correlati