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