Формат представления данных 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
}