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

j'ai vu ce 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 devrait ressembler à ceci:

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

je veux utiliser AJV pour la validation JSON dans un noeud.js projet et j'ai essayé plusieurs schémas pour tenter de décrire mes données, mais je reçois toujours ce que l'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 aussi essayé de générer le schéma en utilisant cet outil en ligne mais qui ne fonctionne pas, et de vérifier que devrait sortir le résultat correct, j'ai essayé de valider cette sortie contre jsonschemavalidator.net, mais qui me donne une erreur similaire:

Found 1 error(s)
 Message:
 Invalid type. Expected Array but got Object.
 Schema path:
 #/type
18
demandé sur Community 2016-04-21 04:21:55

1 réponses

Vous avez défini votre schéma correctement, sauf qu'il ne correspond pas aux données que vous dites valider. Si vous modifiez la propriété noms correspondent au schéma, vous avez encore une question. Si vous voulez permettre à "toll" et "message" d'être nul, vous pouvez faire ce qui 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. L'exemple de données que vous avez posté ne devrait pas entraîner cette erreur. Utilisez-vous le validateur sur certaines données autres que celles qui sont affichées dans la question?

31
répondu Jason Desrosiers 2016-04-21 02:03:38