Проверка JSON с помощью схемы JSON в C # с использованием Newtonsoft - PullRequest
1 голос
/ 21 сентября 2019

Проверка JSON с помощью схемы JSON всегда возвращает true.Newtonsoft используется для проверки и протестирована здесь со схемой и данными.Он всегда возвращает «Ошибки не найдены.JSON проверяет соответствие схеме '.

Найдите мою схему JSON.


{
  "schema": {
    "definitions": {
    },
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://example.com/root.json",
    "type": "object",
    "widget": { "formlyConfig": { "type": "accordion" } },
    "title": "The Root Schema",
    "required": [
      "accordion1",
      "accordion2",
      "accordion3"
    ],
    "properties": {
      "accordion1": {
        "$id": "#/properties/accordion1",
        "type": "object",
        "title": "The Accordion1 Schema",
        "required": [
          "firstname",
          "age"
        ],
        "properties": {
          "firstname": {
            "$id": "#/properties/accordion1/properties/firstname",
            "type": "string",
            "title": "The Firstname Schema",
            "default": "firstname pvr1"
          },
          "age": {
            "$id": "#/properties/accordion1/properties/age",
            "type": "integer",
            "title": "The Age Schema",
            "default": 21
          }
        }
      },
      "accordion2": {
        "$id": "#/properties/accordion2",
        "type": "object",
        "title": "The Accordion2 Schema",
        "required": [
          "firstname",
          "age"
        ],
        "properties": {
          "firstname": {
            "$id": "#/properties/accordion2/properties/firstname",
            "type": "string",
            "title": "The Firstname Schema",
            "default": "firstName2"
          },
          "age": {
            "$id": "#/properties/accordion2/properties/age",
            "type": "integer",
            "title": "The Age Schema",
            "default": 31
          }
        }
      },
      "accordion3": {
        "$id": "#/properties/accordion3",
        "type": "object",
        "title": "The Accordion3 Schema",
        "required": [
          "firstname",
          "age"
        ],
        "properties": {
          "firstname": {
            "$id": "#/properties/accordion3/properties/firstname",
            "type": "string",
            "title": "The Firstname Schema",
            "default": "firstnaem3"
          },
          "age": {
            "$id": "#/properties/accordion3/properties/age",
            "type": "integer",
            "title": "The Age Schema",
            "default": 10
          }
        }
      }
    },
      'additionalProperties': false
  }
}


Найдите JSON

{ 
   "accordion1":{ 
      "firstname":"JSON ACCORD PALANIVELRAJAN",
      "age":29
   },
   "accordion2":{ 
      "firstname":"JSON ACCORD LAKSHMANAN",
      "age":39
   },
   "accordion3":{ 
      "firstname":null,
      "age":49
   }
}

Я попытался изменить имя на целое иудалить первый в аккордеоне1.Он возвращает true для всех случаев.

Пожалуйста, сообщите.

Пожалуйста, найдите код, который проверяет JSON со схемой JSON.

модель является объектом JObject и является допустимым JSON.

JsonSchema json_schema = JsonSchema.Parse(schema);
IList<string> messages;
bool valid = model.IsValid(json_schema, out messages);
return valid;

1 Ответ

0 голосов
/ 21 сентября 2019

JsonSchema устарела и перемещена в отдельный пакет: Newtonsoft.Json.Schema .Используя этот пакет, я смог проверить ваш JSON по вашей схеме (я действительно удалил внешний элемент schema, так как он на самом деле недопустим и приводит к неправильной проверке схемы - я думаю, что вы могли иметь его там, потому чтостарый класс JsonSchema не мог анализировать схему иначе!) и получать сообщения об ошибках, если я изменил JSON на недопустимую форму, удалил обязательные элементы или изменил данные на недопустимые типы:

            string data = File.ReadAllText("data.json");
            string schema = File.ReadAllText("data.schema.json");

            var model = JObject.Parse(data);
            var json_schema = JSchema.Parse(schema);

            IList<string> messages;
            bool valid = model.IsValid(json_schema, out messages); // properly validates

IЯ использую .NET Core 2.2, Newtonsoft.Json 12.0.2 и Newtonsoft.Json.Schema 3.0.11, на всякий случай.Обратите внимание, что пакет Newtonsoft.Json.Schema имеет ограничения для коммерческого использования - проверьте лицензирование!

...