@ganjo888

Как провалидировать jsonShema?

Для валидации использую библиотеку justinrainbow/json-schema

$pathSchema = file_get_contents('/source/test.json');

 $validator = new Validator();
            $validator->check(json_decode($data),
                (object)$pathSchema);

if ($validator->isValid()) {
              echo  "valid";
            } else {
                echo  "not valid";
            }

Содержимое $data
array (size=8)
  0 => 
    object(stdClass)[175]
      public 'id' => int 1
      public 'name' => string 'Москва' (length=12)
  1 => 
    object(stdClass)[194]
      public 'id' => int 2
      public 'name' => string 'Республика Коми' (length=29)

содержимое $pathSchema
{
  "id": {
    "type": "number",
  },
  "name": {
    "type": "number",
  }
}

намеренно пытаюсь сформировать неверные данные,
почему то получаю все время 'valid', хоть и схема не правильная
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 2
@EvgeniiR
https://github.com/EvgeniiR
Чтобы запретить присылать лишние поля, вам нужно описывать объекты в схеме, объявлять их свойства(properties) и указывать в схеме параметр additionalProperties => false

Пример из документации

{
  "type": "object",
  "properties": {
    "number":      { "type": "number" },
    "street_name": { "type": "string" }
  },
  "additionalProperties": false
}


https://json-schema.org/understanding-json-schema/...
Ответ написан
@hesy
Самоуч
function is_valid_json($str) 
{
    json_decode($str);
    return (json_last_error() == JSON_ERROR_NONE);
}

if (is_valid_json($str)) {
    echo 'valid';
} else {
    echo 'invalid';
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы