2016-04-21 13 views
7

Ho visto questo other question ma non è proprio la stessa cosa, e sento che il mio problema è più semplice, ma semplicemente non funziona.Definizione schema JSON per matrice di oggetti

I miei dati sarebbero simile a questa:

[ 
    { "loc": "a value 1", "toll" : null, "message" : "message is sometimes null"}, 
    { "loc": "a value 2", "toll" : "toll is sometimes null", "message" : null} 
] 

Sono voler utilizzare AJV per la convalida JSON in un progetto Node.js e ho provato diversi schemi per cercare di descrivere i miei dati, ma io sempre ottenere questo come l'errore:

[ { keyword: 'type', 
    dataPath: '', 
    schemaPath: '#/type', 
    params: { type: 'array' }, 
    message: 'should be array' } ] 

sembra lo schema che ho provato in questo modo:

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "properties": { 
     "loc": { 
     "type": "string" 
     }, 
     "toll": { 
     "type": "string" 
     }, 
     "message": { 
     "type": "string" 
     } 
    }, 
    "required": [ 
     "loc" 
    ] 
    } 
} 

Ho anche provato a generare lo schema usando this online tool ma anche questo non funziona, e per verificare che questo dovrebbe produrre il risultato corretto, ho provato a convalidare quell'output contro jsonschemavalidator.net, ma anche questo mi dà un errore simile:

Found 1 error(s) 
Message: 
Invalid type. Expected Array but got Object. 
Schema path: 
#/type 

risposta

16

Hai definito lo schema correttamente, tranne che non corrisponde ai dati che dici di convalidare. Se si modificano i nomi delle proprietà in modo che corrispondano allo schema, si ha ancora un problema. Se si desidera consentire a "pedaggio" e "messaggio" di essere nulli, è possibile effettuare quanto segue.

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "properties": { 
     "loc": { 
     "type": "string" 
     }, 
     "toll": { 
     "type": ["string", "null"] 
     }, 
     "message": { 
     "type": ["string", "null"] 
     } 
    }, 
    "required": [ 
     "loc" 
    ] 
    } 
} 

Tuttavia, ciò non è correlato al messaggio di errore che si sta ricevendo. Quel messaggio significa che i dati che stai convalidando non sono una matrice. I dati di esempio che hai pubblicato non dovrebbero comportare questo errore. Stai eseguendo il validatore su alcuni dati diversi da ciò che viene pubblicato nella domanda?

+0

Non sono nemmeno al punto di convalidare i dati, in questo momento sto solo provando a convalidare lo schema stesso. –

+0

@KyleFalconer, lo schema è valido. Ho provato il validatore a cui ti sei collegato. Penso che il problema che stai avendo è che mette '{}' nel campo "Input JSON" per impostazione predefinita. Devi cambiarlo in un array. Lo strumento fa apparire l'errore con lo schema, ma in realtà sono i dati che non sono validi. – Jason

+0

Dang, hai ragione! Grazie mille! –