web-dev-qa-db-fra.com

Définition de schéma JSON pour un tableau d'objets

J'ai vu cela autre question mais ce n'est pas tout à fait la même chose, et j'ai l'impression que mon problème est plus simple, mais ne fonctionne tout simplement pas.

Mes données ressembleraient à ceci:

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

Je souhaite utiliser AJV pour la validation JSON dans un projet Node.js et j'ai essayé plusieurs schémas pour essayer de décrire mes données, mais j'ai toujours obtenez ceci comme erreur:

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

Le schéma que j'ai essayé ressemble à ceci:

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

J'ai également essayé de générer le schéma en utilisant cet outil en ligne mais cela ne fonctionne pas non plus, et pour vérifier que cela devrait produire le résultat correct, j'ai essayé de valider cette sortie par rapport à jsonschemavalidator.net , mais cela me donne également une erreur similaire:

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

Vous avez correctement défini votre schéma, sauf qu'il ne correspond pas aux données que vous dites valider. Si vous modifiez les noms de propriété pour qu'ils correspondent au schéma, vous rencontrez toujours un problème. Si vous souhaitez autoriser la nullité de "péage" et de "message", vous pouvez procéder comme suit.

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

Cependant, cela n'est pas lié au message d'erreur que vous obtenez. Ce message signifie que les données que vous validez ne sont pas un tableau. Les exemples de données que vous avez publiés ne doivent pas entraîner cette erreur. Exécutez-vous le validateur sur des données autres que celles publiées dans la question?

40
Jason Desrosiers