Подтвердить что ты не робот

Определение схемы JSON для массива объектов

Я видел этот другой вопрос, но это не совсем то же самое, и я чувствую, что моя проблема проще, но просто не работает.

Мои данные будут выглядеть так:

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

Я хочу использовать AJV для проверки JSON в проекте Node.js, и я пробовал несколько схем для попробуйте описать мои данные, но я всегда получаю это как ошибку:

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

Схема, которую я пробовал, выглядит так:

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

Я также попытался создать схему с помощью этого онлайн-инструмента, но это также не работает, и чтобы убедиться, что это должно выводиться правильный результат, я попытался проверить этот вывод на jsonschemavalidator.net, но это также дает мне аналогичную ошибку:

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

Ответ 1

Вы правильно определили свою схему, за исключением того, что она не соответствует данным, которые вы говорите, проверяете. Если вы измените имена свойств в соответствии с схемой, у вас останется одна проблема. Если вы хотите разрешить "платные" и "сообщения" равными нулю, вы можете сделать следующее.

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

Однако это не связано с сообщением об ошибке, которое вы получаете. Это сообщение означает, что данные, которые вы проверяете, не являются массивом. Приведенные данные примера не должны приводить к этой ошибке. Вы используете валидатор для некоторых данных, кроме тех, что размещены в вопросе?