Открыть сервис

Формат JSON

JSON (JavaScript Object Notation, читается «джейсон») — это текстовый формат обмена данными, основанный на синтаксисе объектов языка JavaScript. JSON является языконезависимым форматом, использующим соглашения, общие для многих языков программирования (включая C, C++, C#, Java, JavaScript, Perl, Python и многие другие). Он предназначен для сериализации структурированных данных и передачи их по сети, а также для хранения в файлах. Ключевыми характеристиками JSON являются простота чтения и написания для человека, а также лёгкость разбора и генерации для машины.

История

Формат JSON был разработан американским программистом Дугласом Крокфордом в начале 2000-х годов. Первоначально он возник как подмножество литеральной нотации объектов JavaScript, используемой в веб-приложениях для асинхронного обмена данными между браузером и сервером (технология AJAX). До этого основным форматом для таких целей был XML, который был более громоздким и требовал больше ресурсов для парсинга.

В 2001 году Крокфорд и Чип Морнингстар впервые предложили использовать JSON как альтернативу XML. В 2002 году Крокфорд зарегистрировал домен json.org и опубликовал спецификацию. В 2006 году он официально представил JSON в качестве спецификации RFC 4627 (IETF). С тех пор формат получил широчайшее распространение, став де-факто стандартом для обмена данными в RESTful API, конфигурационных файлах и многих других областях. В 2013 году была опубликована обновлённая спецификация RFC 7158, а в 2017 году — стандарт ECMA-404, который закрепил синтаксис JSON на международном уровне.

Структура и синтаксис

JSON представляет собой набор пар «ключ: значение», организованных в две основные структуры данных: объект и массив. Синтаксис JSON является подмножеством синтаксиса JavaScript, но с рядом ограничений.

Типы данных

JSON поддерживает следующие типы данных:

  • Число: Целое или число с плавающей точкой. Записывается в десятичной системе счисления. Примеры: 42, -3.14, 1.5e10.
  • Строка: Последовательность символов Unicode, заключённая в двойные кавычки ("). Допускается экранирование специальных символов (например, \", \n, \t, \\). Пример: "Hello, world!".
  • Логическое значение (булев): Либо true, либо false.
  • Null: Пустое значение, обозначаемое ключевым словом null.
  • Объект: Неупорядоченный набор пар «ключ: значение», заключённый в фигурные скобки {}. Ключ должен быть строкой, значение — любым из допустимых типов. Пары разделяются запятыми. Пример: {"name": "Иван", "age": 30}.
  • Массив: Упорядоченный список значений, заключённый в квадратные скобки []. Значения разделяются запятыми и могут быть любого типа, включая другие объекты и массивы. Пример: ["один", 2, null, true].

Правила синтаксиса

  • Данные представляются в виде пар «ключ: значение».
  • Ключи (имена свойств) всегда заключаются в двойные кавычки.
  • Значения могут быть любого из шести типов.
  • Объекты и массивы могут быть вложенными произвольной глубины.
  • После последнего элемента в объекте или массиве запятая не ставится.
  • Пробельные символы (пробелы, табуляции, переводы строк) между элементами игнорируются.

Пример JSON

``json { "person": { "firstName": "Пётр", "lastName": "Петров", "age": 35, "isEmployed": true, "address": { "city": "Москва", "street": "Тверская", "postalCode": null }, "phoneNumbers": [ {"type": "home", "number": "495-123-4567"}, {"type": "work", "number": "495-765-4321"} ] } } ``

Применение

JSON используется в самых разных областях разработки программного обеспечения и веб-технологий.

Веб-API и AJAX

Основная сфера применения JSON — обмен данными между клиентом (например, веб-браузером или мобильным приложением) и сервером. RESTful API практически повсеместно используют JSON в качестве формата для сериализации запросов и ответов. Это позволяет веб-страницам динамически обновлять содержимое без перезагрузки (технология AJAX).

Конфигурационные файлы

JSON часто используется для хранения конфигураций приложений. Например, файлы package.json в экосистеме Node.js, composer.json в PHP, manifest.json для веб-приложений и расширений браузеров. Благодаря читаемости и простоте, JSON удобен для ручного редактирования и автоматической обработки.

Хранение данных

Некоторые базы данных, такие как MongoDB и Couchbase, используют JSON-подобные форматы (BSON — бинарный JSON) для хранения документов. Также JSON может использоваться для хранения небольших объёмов данных в файловой системе (например, файлы .json для сохранения настроек или кэша).

Сериализация данных

JSON является одним из основных форматов для сериализации объектов в языках программирования. Библиотеки для работы с JSON существуют практически для всех популярных языков (Python, Java, C#, PHP, Ruby, Go, Rust и др.), что делает его универсальным средством для передачи данных между системами на разных языках.

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

Преимущества

  • Простота и читаемость: Синтаксис JSON интуитивно понятен как для человека, так и для машины.
  • Лёгкость: JSON-данные занимают меньше места по сравнению с XML, так как не содержат закрывающих тегов и имеют более лаконичный синтаксис.
  • Скорость парсинга: Парсеры JSON работают очень быстро, что критично для высоконагруженных веб-приложений.
  • Языковая независимость: Поддерживается практически всеми современными языками программирования.
  • Стандартизация: Формат описан международными стандартами (ECMA-404, RFC 8259), что обеспечивает совместимость.

Недостатки

  • Отсутствие типов данных: JSON не поддерживает такие типы, как дата/время, бинарные данные, специальные числовые форматы (например, BigInteger). Для их передачи требуется дополнительное соглашение (например, кодирование даты в строку по ISO 8601).
  • Отсутствие комментариев: В стандартном JSON нельзя вставлять комментарии, что усложняет документирование конфигурационных файлов. Для решения этой проблемы иногда используются расширения (например, JSON5 или JSONC).
  • Ограниченная поддержка циклических ссылок: JSON не поддерживает сериализацию объектов с циклическими ссылками (когда объект ссылается сам на себя). Это требует специальной обработки.
  • Отсутствие схемы: В отличие от XML (с XSD), JSON не имеет встроенного механизма для определения и валидации структуры данных. Для этих целей используются внешние спецификации, такие как JSON Schema.

Сравнение с XML

JSON и XML являются двумя основными текстовыми форматами для обмена данными. Основные различия:

ХарактеристикаJSONXML
СинтаксисЛаконичный, основан на парах ключ-значениеГромоздкий, основан на тегах
ЧитаемостьВысокая для простых структурСредняя, сложнее для массивов
Размер данныхМеньшеБольше (из-за закрывающих тегов)
Типы данныхОграниченный набор (число, строка, bool, null)Все данные — строки (требуется преобразование)
Поддержка схемВнешняя (JSON Schema)Встроенная (DTD, XSD)
КомментарииНетДа
ПарсингБыстрый, простойБолее медленный, сложный
ПрименениеВеб-API, конфиги, NoSQL БДДокументооборот, SOAP, конфиги (Java, .NET)

Инструменты и библиотеки

Для работы с JSON существует множество инструментов:

  • Библиотеки для языков программирования:
  • JavaScript: Встроенные JSON.parse() и JSON.stringify().
  • Python: Модуль json (стандартная библиотека).
  • Java: Библиотеки Jackson, Gson, org.json.
  • C#: Пространство имён System.Text.Json (встроенное) и Newtonsoft.Json (Json.NET).
  • PHP: Функции json_encode() и json_decode() (встроенные).
  • Go: Пакет encoding/json (стандартная библиотека).
  • Инструменты для валидации и форматирования:
  • Онлайн-валидаторы и форматтеры (например, jsonlint.com).
  • JSON Schema Validator — для проверки соответствия структуры заданной схеме.
  • Редакторы: Большинство современных IDE (VS Code, IntelliJ IDEA, PyCharm) имеют встроенную поддержку JSON (подсветка синтаксиса, автодополнение, валидация).

Интересные факты

  • Название «JSON» было выбрано Дугласом Крокфордом как аббревиатура от «JavaScript Object Notation», хотя сам формат не зависит от JavaScript.
  • Несмотря на то, что JSON основан на синтаксисе JavaScript, он не является его подмножеством. Например, в JSON строки могут содержать только определённые escape-последовательности, а ключи объектов всегда должны быть в двойных кавычках, в отличие от JavaScript.
  • Существует расширение JSON5, которое добавляет в формат комментарии, необязательные кавычки для ключей и другие улучшения для удобства ручного редактирования.
  • Формат JSON активно используется в системах интернета вещей (IoT) для обмена данными между устройствами и облачными сервисами.

Источники

  1. RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format (IETF).
  2. ECMA-404 — The JSON Data Interchange Syntax (Ecma International).
  3. Crockford, D. (2006). JSON: The Fat-Free Alternative to XML.
  4. Документация по JSON на сайте json.org.
  5. Стандартная библиотека Python, раздел json.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →