Что такое JSON? Универсальный формат данных

автор vadim


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

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

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

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

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

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

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

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

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

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

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

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

Простая страница входа.ИДГ

Рисунок 1. Простая страница входа.

В листинге 1 показана страница, описанная с использованием JSON.

Листинг 1. JSON для страницы входа


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

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

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

JSON против XML

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

Листинг 2. Форма входа в XML


<UserLogin>
  <Username>Samwise Gamgee</Username>
  <Password>ghB5fK5</Password>
</UserLogin>

Ура! Просто смотреть на эту форму утомительно. Представьте, что вам нужно создать и проанализировать его в коде. Напротив, использовать 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 против YAML и CSV

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

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

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

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

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

JSON с вложенными объектами

В листинге 4 показано, как определять вложенные объекты JSON.

Листинг 4. Вложенный 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 означает его чтение и создание соответственно. Вы видели JSON.stringify() уже в действии. Это встроенный в программы JavaScript механизм, который принимает представление объекта в памяти и преобразует его в строку JSON. Чтобы пойти в другом направлении, то есть взять строку JSON и превратить ее в объект в памяти, вы используете JSON.parse().

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

В JavaScript принято отправлять и получать JSON на серверы. Например, со встроенным fetch() API. При этом вы можете автоматически проанализировать ответ, как показано в листинге 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 или доступ к известным свойствам объекта данных.

Схема JSON и форматтер JSON

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

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

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

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

Заключение

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

Related Posts

Оставить комментарий