• Время чтения: 12 минут

Теги: #Веб разработка

Немного истории

Изначально JSON разрабатывался как формат для обмена данными между клиентом JavaScript и сервером. Он быстро завоевал популярность как легко читаемый для человека формат, который front-end программисты могли использовать для обмена данными с сервером, используя упрощенный, стандартизированный формат. Разработчики также обнаружили, что JSON очень гибок: можно было добавлять, удалять и обновлять поля в произвольном порядке. Эта гибкость была достигнута ценой безопасности, которая была позже решена с помощью JSON Schema.

Любопытным поворотом стало то, что JSON был популяризирован благодаря революции AJAX. Согласитесь, странно, учитывая тогдашний акцент на XML, но именно JSON позволил AJAX по-настоящему засиять. Использование REST в качестве стандарта для разработки API и JSON как средства для обмена оказалось мощной комбинацией для поддержания баланса между простотой, гибкостью и связностью.

В дальнейшем JSON перешел с front-end JavaScript на обмен данными клиент-сервер, а оттуда – на системные конфигурационные файлы, back-end языки и вплоть до баз данных. JSON также послужил толчком для движения NoSQL, которое в корне изменило хранение данных. Оказалось, что администраторам баз данных также понравилась гибкость JSON и простота программирования.

Сегодня документо-ориентированные хранилища, такие как MongoDB, предоставляют API, работающий с JSON-подобными структурами данных. В интервью в начале 2022 года технический директор MongoDB Марк Портер отметил, что, с его точки зрения, JSON все еще раздвигает границы работы с данными. Весьма неплохо как для формата данных, который начинал свой путь со скромной фигурной скобки и двоеточия.

Почему разработчики используют JSON

Независимо от того, над каким типом программы они работают, разработчики программного обеспечения нуждаются в каком-то способе описания и обмена данными. Такая необходимость наблюдается в базах данных, бизнес логике, пользовательских интерфейсах и всех системах обмена данными. Существует множество подходов к структурированию данных для обмена. Два основных лагеря включают двоичные и текстовые данные. JSON – это текстовый формат, поэтому его могут читать как люди, так и компьютеры.

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

Как работает JSON

При вводе имя пользователя и пароля в форму на веб-странице вы взаимодействуете с объектом, имеющим два поля: имя пользователя и пароль. В качестве примера рассмотрим страницу входа в систему на Рисунке 1.

Обычная страница входа в систему

Обычная страница входа в систему.

Пример №1. Ниже показана эта страница, описанная с помощью JSON. Данные для страницы входа у формате JSON:

{
   username: “Bilbo Baggins”,
   password: “fkjfdf3fd2jv9dwwf”
}

Все, что находится внутри скобок или волнистых скобок ( {...} ) относится к одному и тому же объекту. Объект, в данном случае, в самом общем смысле слова означает "единую сущность". Внутри скобок находятся свойства, которые принадлежат объекту. Каждое свойство состоит из двух частей: имени и значения, разделенных двоеточием. Они называются ключами и значениями. В примере ниже "имя пользователя" – это ключ, а "Бильбо Бэггинс" – значение.

Свойства, поля и атрибуты

Каждый из этих элементов используется для обозначения частей объекта JSON. С технической точки зрения, в контексте объектно-ориентированного языка программирования, они называются членами. Каждое свойство, поле или атрибут является членом объекта.

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

JSON vs XML

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

Пример №2. Форма входа в систему в формате XML:


  Samwise Gamgee
  ghB5fK5

Ох! Просто смотреть на эту форму уже утомительно. Представьте, что вам придется создавать и проводить ее синтаксический анализ в коде. В отличие от этого, использование JSON в JavaScript очень просто. Просто попробуйте это сделать. Нажмите F12 в браузере, чтобы открыть консоль JavaScript, затем вставьте JSON, показанный в примере №3.

Пример №3. Использование JSON в JavaScript

let hobbitJson = {
    name: "Pippin",
    hometown: "Shire"
}
console.log(hobbitJson.name);  // outputs “Pippin”
hobbitJson.bestFriend = "Merry";  // modify the object
console.log(JSON.stringify(hobbitJson)); //output entire object

// {"name":"Pippin","hometown":"Shire","bestFriend":"Merry"}

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

JSON vs YAML и CSV

Два формата данных, которые иногда сравнивают с JSON, – это YAML и CSV. Эти два формата находятся на противоположных концах временного спектра. CSV – это древний, доцифровой формат, который в конечном итоге нашел применение в компьютерах. YAML вдохновляся форматом JSON и является его концептуальным потомком.

CSV представляет собой простой список значений, каждая запись которого обозначается запятой или другим символом-разделителем, с опциональной первой строкой заголовка. Он довольно ограничен как средство обмена и программная структура, но все же полезен для вывода больших объемов данных на диск. И, конечно, организация табличных данных в CSV идеально подходит для таких вещей, как электронные таблицы.

YAML – это фактически надмножество JSON, то есть он поддерживает все, что поддерживает JSON. Но YAML также поддерживает более упрощенный синтаксис, который еще более лаконичен, чем в JSON. Например, YAML использует отступы для создания иерархии, отказываясь от скобок. Хотя YML иногда используется в качестве формата обмена данными и очень часто задействуется при работе с конфигурационными файлами.

Сложный JSON: вложения, объекты и массивы

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

Вложенные объекты в JSON

В примере №4 показано, как определить вложенные объекты JSON. Вложенный JSON:

let merry = { name: "Merry",
  bestfriend: {
    name: "Pippin"
  }
}

Свойство bestfriend в примере №4 ссылается на другой объект, который определен в строке как литерал JSON.

Объектные ссылки в JSON

Теперь рассмотрим пример №5, где вместо имени в свойстве bestfriend используется ссылка на реальный объект.

Пример №5. Ссылка на объект

let merry = { race: "hobbit", name: “Merry Brandybuck” }
let pippin = {race: "hobbit", name: “Pippin Took”, bestfriend: merry }
console.log(JSON.stringify(pippin.bestfriend.name)); // outputs “Merry Brandybuck”

В примере №5 мы поместили ссылку объекта merry в свойство bestfriend. Затем мы можем получить фактический объект merry от объекта pippin через свойство bestfriend. Мы получили имя объекта merry с помощью свойства name. Это называется обходом графа объектов, который выполняется при помощи оператора "." (точка).

Массивы в JSON

Другой тип структуры, которую могут иметь свойства JSON, – это массивы. Они выглядят так же, как массивы JavaScript, и обозначаются квадратной скобкой, как показано в примере №6.

Пример №6. Свойство массива

{
  towns: [ “The Shire”, “Rivendale”, “Gondor” ]
}

Конечно, массивы могут содержать ссылки и на другие объекты. С помощью этих двух структур JSON может моделировать любой диапазон сложных отношений между объектами.

Краткое описание значимых типов JSON

Ранее вы уже встречались со строками, объектами и массивами в качестве значимых типов. Дополнительные значимые типы для свойств JSON включают строку, число, объект, массив, true, false и null.

Синтаксический анализ и генерация JSON

Синтаксический анализ и генерация JSON подразумевает считывание и создание JSON, соответственно. Вы уже видели JSON.stringify() в действии. Это встроенный механизм для программ JavaScript, позволяющий взять представление объекта в памяти и превратить его в строку JSON. Чтобы пойти в другом направлении, то есть взять строку JSON и превратить ее в объект в памяти, вы используете JSON.parse().

В большинстве других языков для синтаксического анализа и генерации необходимо использовать сторонние библиотеки. Например, в Java существует множество библиотек, но наиболее популярными являются Jackson и GSON. Эти библиотеки сложнее, чем stringify и parse в JavaScript, но они также предлагают расширенные возможности, такие как маппинг между пользовательскими типами и работу с другими форматами данных.

В JavaScript принято отправлять и получать JSON на серверы. Например, с помощью встроенного API fetch(). При этом можно автоматически проанализировать ответ, как показано в примере №7.

Пример №7. Анализ ответа в формате JSON с помощью функции fetch()

fetch('https://the-one-api.dev/v2/character')
  .then((response) => response.json())
  .then((data) => console.log(data));

Как только вы превратите JSON в структуру данных в памяти, будь то JavaScript или другой язык, вы можете использовать API для манипулирования этой структурой. Например, в JavaScript к JSON, проанализированному в примере №7, можно было бы обращаться как к любому другому объекту JavaScript, возможно, через цикл data.keys или доступ к известным свойствам объекта данных.

JWTs

Аутентификация – это еще одна область, где используется JSON. Разработчики и другие пользователи используют веб-токены JSON, или JWT, для передачи утверждений для аутентификации. JWT имеют стандартный, компактный формат и криптографическую подпись для предотвращения фальсификации. Они также могут быть зашифрованы для обеспечения секретности.

JSON схема и JSON форматировщик

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

Еще одна проблема – это работа с машинно-обработанным JSON, который является уменьшенным и неразборчивым. К счастью, эту проблему можно легко решить. Просто перейдите к JSON Formatter & Validator (мне нравится этот инструмент, но есть и другие), вставьте ваш JSON и нажмите кнопку Process. Вы увидите легко читаемую для человека версию, которую можно использовать. Большинство IDE также имеют встроенный форматировщик JavaScript для форматирования JSON.

Использование JSON в TypeScript

TypeScript позволяет определять типы и интерфейсы, поэтому бывают случаи, когда использование JSON в TypeScript оказывается полезным. Класс, как и схема, описывает допустимые свойства экземпляра данного типа. В обычном JavaScript нет возможности ограничить свойства и их типы. Классы JavaScript подобны предложениям; программист может задать их сейчас и изменить JSON позже. Класс TypeScript, однако, принудительно определяет, какие свойства может иметь JSON и какого типа они могут быть.

Заказать сайт на Битрикс

Заключение

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

Редакция WRP
Редакция WRP

JSON – это наиболее распространенный формат обмена данными при разработке веб-приложений и не только. Ниже вы узнаете, что вам нужно знать о JavaScript Object Notation.

JSON, или JavaScript Object Notation, – это формат, который используется для представления данных. Он появился в начале 2000-х годов как часть JavaScript и постепенно развивался, став одним из главных средств для описания и обмена текстовыми данными. Сегодня JSON является универсальным стандартом обмена данными. Его можно встретить в любой области программирования, включая разработку front-end и серверной части, разработку систем и промежуточного ПО, баз данных.

Эта статья познакомит вас с JSON. Вы сможете получить общее представление об этой технологии, узнать как она работает в сравнении с аналогичными стандартами, такими как XML, YAML и CSV, а также увидеть примеры использования JSON в различных программах и ситуациях.

Онлайн заказ
Комментарии:
Нет комментариев
Оставить комментарий

Ваш адрес email не будет опубликован.

Дайте оценку
Остались вопросы или хотите обсудить Ваш проект?
Оставить заявку
Чат
  • Планшет
  • Оплата
Адрес

г. Москва, Хлебозаводский проезд, 7с9

Время работы

Пн-Пт: 10.00 - 19.00
Сб - Вс: выходной

Контактный телефон +7 (495) 230-20-53
Email info@wrp.ru