Формат представления данных JSON #
Васильев Андрей Михайлович, 2024
Версии презентации
История создания JSON #
При разработке распределённых веб-приложений множеству процессов приходится обмениваться данными. В 90-x годах стандартом для представления данных являлся формат XML (extensible Markup Language)
Веб-разработчикам, работающим на JavaScript, данный формат показался
- Многословным, т.е. требующим большого объёма данных для передачи
- Неудобным для использования, т.е. требующего большого количества действий для обработки данных. Это скорее проблема среды исполнения, а не формата
В начале 2000х был предложен формат JavaScript Object Notation (JSON), который решал данные проблемы
- Формат является текстовым, нацеленным на чтение обычным человеком
- Изначально был разработан для использования вместе с JavaScript, основан на его модели данных
- Сейчас для большинства языков программирования разработаны библиотеки для работы с этим языком
Ключевые компоненты JSON #
- JSON концептуально состоит из двух компонентов
- Коллекция пар ключ-значение, объекты
- Ключами всегда являются строки
- Упорядоченный список значений, массивы
- Коллекция пар ключ-значение, объекты
- В качестве значений могут выступать объекты, массивы и примитивные значения
- Примитивными значениями могут быть:
- Строки
- Вещественные числа
- Логические значения
trueиfalse null-значение
- Корневым элементом обычно является объект или массив
Написание массива #
- Описание массива начинается с символа
[и заканчивается символом] - Между ними находятся значения, разделённые запятой
- Массивы не являются типизированными, значением может быть любой элемент
- На практике так обычно не поступают, значения обычно принадлежат к одному типу
Массив чисел:
[ 1, 2
, 3,4,5]- Непечатные символы игнорируются
- Запятая после последнего элемента запрещена
Написание объектов #
- Описание объекта начинается с символа
{и заканчивается символом} - Между ними находятся пары ключ-значение
- Ключом является строка, которая описывается в двойных кавычках
- Разделителем пары является двоеточие
- Значением может выступать любой элемент
- Пары разделяются между собой запятыми
Пример объекта, описывающего треугольник:
{ "sideA": 5,
"sideB": 3, "sideC": 4,
"color": "RED"}- Непечатные символы игнорируются
- Запятая после последнего элемента
Массивы объектов #
Если значениями массива являются объекты, то логично, что каждый из них должен иметь одинаковый набор ключей с соответствующими им типами значений
[
{"sideA": 3, "sideB": 5, "sideC": 4, "color": "GREEN"},
{"sideA": 2, "sideB": 2, "sideC": 2, "color": "BLACK"}
]Данные в формате JSON могут быть нацелены:
- На обработку человеком
- На обработку машиной
В первом случае документ наполняется большим количеством непечатных символов: пробелы (отступы), переносы
Во втором — все непечатные символы между элементами убираются, чтобы уменьшить объём данных
Строки #
- Строка начинается с двойной кавычки и заканчивается двойной кавычкой
- Между ними можно писать любые символы
- Для включения следующих символов внутрь строки их надо экранировать с помощью
обратной косой черты:
- Двойные кавычки:
\" - Обратная косая черта:
\\ - Непечатные символы табуляции, переноса и т.п.:
\t,\n
- Двойные кавычки:
["Первая строка", "\"Хорошая\" строка"]Числа #
- Поддерживаются только числа в десятичной системе исчисления, двоичные, восьмеричные числа и шестнадцатеричные литералы не поддерживаются
- Поддерживаются только вещественные числа
- При записи целых чисел вещественная часть опускается
- Поддерживается экспоненциальная запись
{
"weight": 150.7,
"height": 65.7,
"score": 1.0e2
}