Инструмент проверки формата: введение в схему JSON

задняя часть внешний интерфейс JSON JavaScript

что такое JSON

JSON, полное имяJavaScript Object NОтация — это подмножество структур данных JS. Я считаю, что все также хорошо знакомы с JSON. В JSON всего шесть структур данных, вот их названия в JS и Python и примеры в JSON:

JS Python3 JSON
string string "ABC"
number int/float 123 -1.23
boolean bool true false
null None null
object dictnu {"key": "value"}
array list ["ABC", 123, true]

Поскольку JSON является подмножеством синтаксиса JS, я буду использовать JS для следующего.

Воспользуйтесь исключительной простотой JSONи широкое использование JS, JSON быстро стал популярным. Но у простоты есть и свои недостатки, и люди постепенно обнаруживают, что в JSON отсутствуют некоторые необходимые функции.

Что такое схема JSON?

Когда текущий сервер использует связь JSON, обеим сторонам необходимо проверить формат данных JSON, например проверить длину массива, размер числа и даже требования, согласно которым определенные два атрибута не могут сосуществовать в одном и том же объекте. Конечно, эти правила можно проверить с помощью кода, но это слишком громоздко для написания, поэтому для того, чтобыОписать и проверить формат JSON, родилась схема JSON.

Вот очень простой пример схемы JSON:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "name":  { "type": "string" },
        "email": { "type": "string" },
    	"age": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": false,
        },
    	"telephone": {
            "type": "string",
            "pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"
        }
    },
	"required": ["name", "email"],
  "additionalProperties": false
}

Приведенный выше JSON описывает такой JSON:

  • тип является объектом
  • Есть четыре свойства:
    • Так:
      • тип — строка
    • Эл. адрес:
      • тип — строка
    • Возраст:
      • тип целочисленный
      • Это целое число должно быть больше или равно 0
    • телефон:
      • тип — строка
      • нужно сопоставить это регулярное выражение
  • Существующее имя и адрес электронной почты должны отображаться в четырех вышеуказанных атрибутах, а остальные два являются необязательными.
  • В дополнение к этим четырем атрибутам никакие другие атрибуты не допускаются.

Например, такой JSON будет соответствовать следующим требованиям:

{
    "name": "Sherlock Holmes",
    "email": "sherlock@gmail.com",
    "age": 164
}

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

Understanding JSON Schema

это здесь,Я настоятельно рекомендую прочитатьUnderstanding JSON SchemaНастолько, что я должен посвятить этому главу. Это очень удобный учебник для начинающих с очень наглядными примерами. Хотя его версия все еще находится в черновике-04 на момент написания, это все еще лучшее руководство по схеме JSON в моем сердце.

Схема понимания схемы JSON приведена здесь, чтобы облегчить проверку и заполнение пробелов:

  • Type-specific keywords
    • string
      • minLength
      • maxLength
      • pattern
    • Numeric types
      • types: integer, number
      • multipleOf
      • range: minimum, exclusiveMinimum, maximum, exclusiveMaximum
    • object
      • properties
      • additionalProperties
      • required
      • size: minProperties, maxProperties
      • dependencies
      • patternProperties
    • array
      • items
      • length: minItems, maxItems
      • uniqueItems
    • boolean
    • null
  • Generic keywords
    • Metadata: title, description, default
    • Enumerated values: enum
  • Combining schemas
    • allOf
    • anyOf
    • oneOf
    • not
  • The $schema keyword
  • Regular Expressions

Версия

На сегодняшний день существует 7 версий схемы JSON, последней из которых является draft-07. Различные версии не (полностью) совместимы, поэтому рекомендуется использовать их при написании схемы JSON.$schemaКлючевое слово отмечает, какая спецификация используется в настоящее время.

Вот пример, показывающий написание «больше чем» и «больше чем или равно» в черновике-04 и черновике-06:

больше, чем:

{
    "$schema": "https://json-schema.org/draft-06/schema#",
    "type": "number",
    "exclusiveMinimum": 0
}
{
    "$schema": "https://json-schema.org/draft-04/schema#",
    "type": "number",
    "minimum": 0,
    "exclusiveMinimum": true
}

больше или равно:

{
    "$schema": "https://json-schema.org/draft-06/schema#",
    "type": "number",
    "minimum": 0
}
{
    "$schema": "https://json-schema.org/draft-04/schema#",
    "type": "number",
    "minimum": 0,
    "exclusiveMinimum": false
}

Примечание: в черновике-04,exclusiveMinimumЗначение по умолчаниюfalse, так что не надо писать.

В проекте-04,exclusiveMinimumЗначенияbooleanДрафт-06 измененnumber. В случае того же значения новая версия действительно более лаконична.

О разнице между разными версиями вы можете узнать на официальном сайте.Migrating from older draftsодин период.

Суммировать

JSON Schema как синтаксис общего назначения для проверки JSON, я думаю, что он успешно справляется со своей задачей. Хотя есть некоторые недостатки, такие как плохая читаемость и громоздкость письма, я думаю, что это необходимые компромиссы.

Оригинальная ссылка:OC со схемой UE.com/JSON. …