Обновлено

JSON: что это, как устроен и где применяется

JSON (сокращение от JavaScript Object Notation) — это текстовый формат, предназначенный для хранения и передачи структурированных данных. Формат создал американский программист Дуглас Крокфорд в 2001 году; в декабре 2017 года IETF закрепил его как интернет-стандарт RFC 8259. JSON читают и компьютер, и человек: данные организованы в виде пар «ключ-значение» и списков.

Как устроен формат JSON: объекты и массивы

JSON – это универсальный язык для отображения данных, который способен читать не только человек, но и все современные программы. Аббревиатура образована из англоязычного выражения JavaScript Object Notation. Последнее наглядно демонстрирует, что в основе формата лежит JavaScript, популярный и широко распространенный язык программирования. Простота и понятность синтаксиса обеспечивает универсальность JSON. С течением времени он «оторвался» от корней и стал независимым от JavaScript. Более того, сегодня JSON очень активно применяется при программировании на многих языках, включая такие востребованные как Python, C#, Java и т.д.

Курс «Python-разработчик + ИИ» от Эдюсон

Школа

Эдюсон

Стоимость

84 915 руб

Цена в рассрочку

4 162 руб/мес

Длительность курса

Программа трудоустройства

Есть

Формат

Запись лекций

Курс «Python-разработчик» от Яндекс Практикум

Школа

Яндекс Практикум

Стоимость

137 000 руб

Цена в рассрочку

16 000 руб/мес

Длительность курса

Программа трудоустройства

Есть

Формат

Запись лекций, Онлайн занятия с преподавателем

Курс «Java-разработчик» от Яндекс Практикум

Школа

Яндекс Практикум

Стоимость

170 500 руб

Цена в рассрочку

20 100 руб/мес

Длительность курса

Программа трудоустройства

Есть

Формат

Запись лекций, Онлайн занятия с преподавателем

Фактически JSON представляет собой текстовые файлы, которые составлены по относительно простым и одновременно строгим правилам. Главным из них становится структурирование данных с помощью двух способов:

  1. Первый называется объект и выступает неупорядоченным набором пар «ключ: значение». Он заключается в фигурные скобки, то есть {}. Ключом всегда является строка в двойных кавычках.
  2. Второй называется массив и выступает упорядоченным списком значений. Он заключается в квадратные скобки, то есть [].

Для большей наглядности стоит привести пример простого кода JSON в виде объекта. Она выглядит следующим образом:

{

“name”: “Алексей”,

“age”: 30,

“skills”: [“SEO”, “Python”, “SQL”]

}

Использование двух перечисленных способов позволяет JSON поддерживать сразу 6 типов данных (источник: RFC 8259, ECMA-404):

  • строка (string);
  • число (number);
  • логическое значение (Boolean: true / false):
  • пустое значение (null);
  • объект (object);
  • массив (array).

Вот – пример, в котором есть все:

{

"name": "example", //строка

"isActive": true, //булево значение

"age": 30, //число

"address": null, //null

"skills": ["JavaScript", "SQL", "Python"], //массив

"details": { //объект

"position": "Developer",

"experience": 5

}

}

Еще проще и удобнее работу с JSON делает возможность совмещать блоки кода с пояснительными текстовыми фрагментами. Последние помогают с быстрым распознаванием синтаксиса. В результате достигается читаемость кода даже программистами со сравнительно невысоким уровнем профессиональной подготовки.

Текстовые фрагменты выделяются по правилам конкретного языка программирования. Например, // (для JavaScript) или # (для Python). Они вставляются в любую часть кода и не мешают его исполнению программой. Причем с задействованием любого языка программирования, поддерживающего формат JSON. То есть с равным успехом и для JavaScript, и, например, для Python. Исходный код для второго может выглядеть следующим образом.

import json

data = {

"name": "Bob",

"age": 30,

"skills": ["Java", "SQL"]

}

# Преобразование объекта в JSON-строку

json_string = json.dumps(data)

print(json_string)

 

# Парсинг JSON-строки в объект

data = json.loads(json_string)

print(data["name"]) # Выведет: Bob

Синтаксис JSON: правила записи

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

  • ключи отображаются только в двойных кавычках;
  • строки — только в двойных кавычках (одинарные запрещены);
  • элементы нужно разделять запятыми;
  • после последнего элемента запятая не ставится (иначе парсер выдаст ошибку);
  • объекты ставятся в {}, массивы — в [];
  • комментарии форматом запрещены (создаться JSON Дуглас Крокфорд намеренно исключил их в 2012 году, чтобы не разрушить совместимость между реализациями);
  • при передаче по сети используется кодировка— UTF-8 (требование RFC 8259).

Творческий подход автора формата Дугласа Крокфорда выразился в любопытном нюансе. Он собственноручно добавил фразу «The Software shall be used for Good, not Evil» в лицензию JSON. Ее перевод очевиден: «Программное обеспечение должно использоваться для Добра, но не для Зла». Цель подобных действий – высмеивание и даже сарказм в отношении корпоративных юристов. Результатом стали проблемы совместимости с другими лицензиями, полученными по схеме open-source (то есть с открытым исходным кодом).

История JSON: от идеи до международного стандарта

Данные Wikipedia позволяют выделить несколько этапов появления и становления LSON как международного стандарта хранения и передачи структурированных данных:

  1. 2001:
    1. Дуглас Крокфорд описал JSON, работая в компании State Software;
    2. первое сообщение в формате JSON передано в апреле 2001 года.
  2. 2002 — Крокфорд зарегистрировал домен json.org.
  3. 2006 — Первая официальная спецификация RFC 4627.
  4. 2013 — Первый международный стандарт ECMA-404, принят Ecma International.
  5. 2017 — RFC 8259 (IETF) стал текущим интернет-стандартом STD 90; одновременно принят ISO/IEC 21778:2017.

Как работает JSON в веб-разработке: применение

Формат JSON активно применяется в веб-разработке сразу по четырем основным направлениям:

  1. REST API — сервер отправляет данные клиенту в JSON-теле ответа; заголовок Content-Type: application/jsonсигнализирует формат.
  2. AJAX-запросы — при скроллинге ленты в соцсети страница не перезагружается; данные подгружаются в фоне через JSON.
  3. Конфигурационные файлы — package.json в Node.js, настройки редакторов (VS Code), манифесты приложений.
  4. Базы данных — MongoDB и PostgreSQL (тип JSONB) хранят документы в JSON-формате.

Обязательным условием эффективного применения JSON на практике выступает последовательное выполнение двух процессов. Первый называется сериализация и представляет собой преобразование объекта (из памяти) в текстовую JSON-строку для дальнейшего сохранения и/или передачи. Задача решается использованием специального инструмента:

  • stringify() в JavaScript;
  • dumps() в Python.

Прямо противоположный процесс называется десериализация, под которой понимается обратное преобразование тестового формата в исходную структуру для размещения в памяти. В этом случае в программном коде появляются:

  • parse() в JavaScript;
  • loads() в Python.

Расширения и стандарты базового формата JSON

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

Логичным выходом из ситуации становится появление нескольких расширений и дополнительных стандартов. Каждое из них одновременно решает две главных задачи: расширение функциональных возможностей с сохранением так называемого RESTFul. Термин показывает соответствие принципам архитектуры исходного продукта, обеспечивающим универсальность и совместимость формата практически со всеми популярными языками программирования.

Среди наиболее популярных расширений JSON стоит отметить два:

  1. JSON Отличается дополнительным функционалом и еще большим удобством для чтения. К числу основных нововведений и дополнений JSON5 (по сравнению с исходным форматом) относятся:
    1. поддержка комментариев (однострочных и многострочных);
    2. отсутствие обязательных кавычек для ключей;
    3. запятые в завершении фразы;
    4. использование одинарных кавычек для строк;
    5. возможность ставить подчеркивание для лучшей читаемости числовых данных.
  2. JSON Одно из последних расширений. Основным его новшеством становится добавление некоторых синтаксических возможностей, присутствующих в ECMAScript 6. В результате удается повысить читаемость и удобство написания исходного формата JSON (особенно вручную). Главные дополнения расширения состоят в следующем:
    1. необязательность кавычек для ключей объектов;
    2. использование обратных апострофов в строках;
    3. применение чисел с ведущим нулем, а также начинающихся или заканчивающихся точкой;
    4. поддержка специальных числовых значений (например, Infinity, -Infinity, NaN и – NaN);
    5. явные знаки «плюс» и множественные знаки «минус» у чисел;
    6. поддержка однострочных и многострочных комментариев.

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

JSON Schema помогает разработчику решить сразу четыре очень важных задачи:

  • валидация документа на предмет соответствия заданным правилам и структуре;
  • помощь при написании необходимой документации;
  • генерация данных для тестирования и последующей отладки;
  • обеспечение совместимости данных, предназначенных для обмена между разными системами.

Преимущества и недостатки JSON

Наиболее значимыми преимуществами формата JSON выступают:

  • простота и читаемость;
  • компактность;
  • универсальность;
  • активное тематическое сообщество;
  • регулярное появление дополнительных расширений.

Основным недостатком формата выступает отсутствие поддержки сложных структур и комментариев. Проблема решается за счет использования дополнительных инструментов (расширений и стандартов), где указанные опции присутствуют.

JSON vs XML vs YAML: сравнение форматов

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

Критерий для сравнения

Формат хранения и передачи данных

JSON

XML

YAML

Читаемость человеком

Высокая

Средняя

Очень высокая

Размер файла

Компактный

Большой (из-за закрывающих тегов)

Компактный

Скорость парсинга браузером

Высокая (по ряду реализаций в десятки раз выше, чем у XML)

Низкая

Средняя

Поддержка комментариев

Нет

Да

Да

Поддержка схем

JSON Schema

XSD

Да

Приоритетная сфера применения

Веб-разработка, API, конфигурация

SOAP, документы, legacy

CI/CD, DevOps-конфигурация

Стандарт

КАС 8259б ECMA-404

W3C

Нет

Основные направления применения JSON перечислены выше. XML используется на практике при программировании SOAP-сервисов, в legacy-системах и различной документации. YAML применяется там, где читаемость важнее скорости, например, для конфигурации DevOps.

Когда JSON не подходит

  1. Необходимо разместить комментарии в файле. Формат JSON их не поддерживает. Поэтому для конфигураций с пояснениями правильнее пользоваться YAML или JSON5.
  2. В данных присутствуют сложные бинарные объекты (изображения, аудио). JSON хранит их как Base64-строки, что приводит к росту размера файла на ~33%. Лучше использовать бинарные форматы (Protocol Buffers, MassagePack), не дающие такого увеличения.
  3. Имеется очень большой датасет, для которого особенно важна скорость парсинга. При потребности потоковой обработки больших объёмов данных стоит рассмотреть streaming или бинарные форматы.
  4. Требуется строгая типизация дат и регулярных выражений. В JSON нет встроенного типа для даты. Она хранится как строка, поэтому соглашение о её формате нужно задавать отдельно.

Таблица сценариев выбора: какой формат данных использовать

Задача программиста

Оптимальный формат данных

Обоснование рекомендации

Разработка REST API между клиентом и сервером

JSON

Компактный формат с быстрым парсингом и нативной поддержкой в браузере

Написание файла конфигурации с комментариями

YAML или JSON5

Стандартный формат JSON не имеет опции поддержки комментариев

Необходимость интеграции с legacy или SOAP-сервисом

HML

SOAP-сервис требует по протоколу использование формата XML

Программирование CI/CDпайплайнов и файлов конфигурации DevOps

YAML

На первый план выходит поддержка комментариев и читаемость (они важнее скорости)

Потребность в передаче бинарных данных (например, изображений)

Protocol Buffers (бинарные форматы данных)

Base64 в JSON приводит к заметному (на 33 %) увеличению объемов файлов с данными

Хранение документов в базах данных

JSON или JASONB (PostgreSQL)

Формат обладает гибкой схемой и нативной поддержкой в SQL и NoSQL

FAQ

Что такое JSON простыми словами?

JSON — это текстовый формат, в котором данные записаны парами «название поля: значение». Его понимают и человек, и программа. Формат используют, когда нужно передать данные между двумя разными системами — например, из мобильного приложения на Swift в серверное API на Java.

Чем JSON отличается от XML?

JSON компактнее: в XML каждый элемент требует открывающего и закрывающего тега, что увеличивает размер файла. Браузеры обрабатывают JSON в десятки раз быстрее XML по ряду реализаций. XML чаще применяют в legacy-системах и SOAP-сервисах, JSON — в REST API и современных веб-приложениях.

Можно ли добавить комментарии в формат данных JSON?

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

В чем заключаются отличия JSON от YAML?

Разработчики YAML сделали акцент на удобочитаемости и поддержке комментариев, что выгодно отличает формат от JSON. Второй, в свою очередь, обладает большей строгостью правил и несколько сильнее машинно-ориентирован (что особенно актуально в сегодняшних условиях стремительного роста возможностей ИИ).

Какова основная разница между JSON и CSV?

Формат CSV актуален для классического представления табличных данных в виде строк и столбцов. JSON отличается заметно большей гибкостью и способностью описывать сложные иерархические структуры, в том числе вложенные или с разными типами данных (даже внутри одного поля).

Изучить основы практического применения формата JSON проще и удобнее всего с помощью онлайн-курсов. Сравнить и подобрать оптимальную программу подготовки специалиста можно на edu.sravni.ru.