что такое 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
- types:
-
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
- Metadata:
- 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. …