JSON файл, который проверяется на наличие ошибки схемы - PullRequest
0 голосов
/ 29 апреля 2020

Я написал проверку схемы JSON для моего JSON файла. Мой файл состоит из массива объектов питания, содержащих Food_Id, Food_Name, Food_Description, Food_Type и Food_Price (Rs). Однако я получаю ошибку, о которой понятия не имею. Можете ли вы помочь мне?

JSONSchemaFoodItems. json

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://api.example.com/food.json#",
"type": "object",
"properties": {
    "Foods": {
        "type": "array",
        "minItems": 1, 
        "uniqueitems": true,
        "items": {
            "type": "object",   
            "properties": {
                "Food_Id": {
                    "type": "integer",
                    "minimum":1
                },  
                "Food_Name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength":255
                },
                "Food_Description": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 255
                },
                "Food_Type": {

                    "type": "array",
                    "items":{
                        "type":"string",
                        "enum":["Starters","Main C 
   ourse","Soups","Beverages","Desserts",
                        "Salads"]
                    }

                },

                "Food_Price(Rs)": {
                "type": "integer",
                "minimum": 1,
            }

            },

            "required": ["Food_Id", "Food_Name", "Food_Description", 
   "Food_Type","Food_Price(Rs)"],
            "additionalProperties": false
        }


    }
},

"additionalProperties": false
}

buildFoodItems JSON. php

<?php
 use Opis\JsonSchema\{
   Validator, ValidationResult, ValidationError, Schema
 };
 require 'vendor/autoload.php';
require_once('includes/db_connect.php');


$sQuery = "SELECT Food_Id, Food_Name, Food_Description, Food_Type, 
`Food_Price(Rs)`  FROM food";

if(isset($_GET['Food_Type']) && is_string($_GET['Food_Type']))
{
 $foodCat = $_GET['Food_Type'];
$sQuery = $sQuery . " WHERE Food_Type = '$foodCat' ";
 }

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $conn->query($sQuery);
// create JSON object
$array_result = $result->fetchAll(PDO::FETCH_ASSOC);

$data = json_encode(array('Foods'=>$array_result), JSON_NUMERIC_CHECK);

$data1 = json_decode($data);

$schema = 
Schema::fromJsonString(file_get_contents('JSONSchemaFoodItems.json'));

$validator = new Validator();

/** @var ValidationResult $result */
 $result = $validator->schemaValidation($data1, $schema);


if ($result->isValid()) {
  //echo '$data is valid', PHP_EOL;
header('Content-Type: application/json'); 
echo $data;
} else {
  /** @var ValidationError $error */
  $error = $result->getFirstError();
  echo '$data is invalid', PHP_EOL;
  echo "Error: ", $error->keyword(), PHP_EOL;
  echo json_encode($error->keywordArgs(), JSON_PRETTY_PRINT), PHP_EOL;
}
?>

ОШИБКА:

Неустранимая ошибка: Uncaught Opis \ JsonSchema \ Exception \ InvalidSchemaException: схема должна быть объектом или логическим значением, NULL, указанным в C: \ xampp \ htdocs \ trial2 \ vendor \ opis \ json -schema \ src \ Schema. php: 63 Трассировка стека: # 0 C: \ xampp \ htdocs \ trial2 \ vendor \ opis \ json -schema \ src \ Schema. php (201): Opis \ JsonSchema \ Schema -> __ construct (NULL, NULL) # 1 C: \ xampp \ htdocs \ trial2 \ buildFoodItems JSON. php (27): Opis \ JsonSchema \ Schema :: fromJsonString ('{\ r \ n "$ схема ... ') # 2 {main} добавляется в C: \ xampp \ htdocs \ trial2 \ vendor \ opis \ json -schema \ src \ Schema. php в строке 63

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...