Как это может быть JSON Схема - PullRequest
1 голос
/ 10 февраля 2020

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

Я пытался с различными библиотеками проверки, json -schema-validator для Java и jsonschema для Python, чтобы получить больше уверенности, но я продолжаю получать смешные утверждение, что это действительный JSON экземпляр схемы.

{
    "hey" : {
        "you" : {
            "how" : {
                "dyd" : "Very well, ty"
            }
        }
    }
}

Я прихожу сюда, потому что кажется очевидным, что у меня есть какое-то большое заблуждение или недоразумение, так как я не могу понять, насколько ясен JSON экземпляр ( он не объявляет типы данных) может быть проверен как JSON экземпляр схемы.

Первоначальная проблема, которую я хотел решить, как я уже говорил в начале, заключается в том, как проверить схему JSON, но если есть JSON допустимый экземпляр - слишком допустимая JSON схема (поскольку результаты выбрасываются г) как это утверждать?

1 Ответ

1 голос
/ 05 апреля 2020

Краткий ответ: JSON Схема предназначена для расширяемости. Это означает, что он позволяет добавлять любые дополнительные свойства, если они не конфликтуют с известными / ожидаемыми ключевыми словами.

В вашем случае свойство hey определенно не является известным ключевым словом, т.е. оно просто игнорируется во время проверки. Это оставляет вас с действительной JSON схемой {}, которая допускает любой тип.

Как убедиться, что что-то на самом деле является JSON схемой тогда? Это зависит от того, насколько уже вы хотите определить термин.

  1. Вы можете установить, что верхнему уровню необходимо определить конкретную $schema версию.
  2. Вы можете применить это по крайней мере, на верхнем уровне есть действительный атрибут type.
  3. Если вы знаете, откуда берутся эти JSON схемы и что они не используют эту расширяемость, вы можете манипулировать своей целью Meta JSON Schema и включите ”additionalProperties”: false в качестве свойства верхнего уровня перед запуском проверки.
...