В чем разница между YAML и JSON?

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

Подробнее о JSON »

Сравнение представления данных в YAML и JSON

Внешний вид и синтаксис JSON и YAML похожи, но все же имеют некоторые отличия.

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

  • фигурные скобки для объектов;
  • двоеточия для разделения пар «ключ-значение»;
  • квадратные скобки для массивов; 
  • кавычки для вложения строк.

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

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

  • отступ для обозначения объектов; 
  • двоеточия для разделения пар «ключ-значение»;
  • дефисы для массивов;
  • символ решетки (#) для обозначения комментария.

YAML изначально создали для упрощения XML.

Примеры документов YAML и JSON

Примеры того, как документ, содержащий данные о товаре «футболка», будет выглядеть в форматах YAML и JSON:

YAML

JSON

type: T-Shirt

price: 20.00

sizes:

  • S
  • M
  • L

   reviews: # Note about reviews

  • username: user1

         rating: 4

         created_at: 2023-04-19T12:30:00Z

  • username: user2

         rating: 5

         created_at: 2023-05-02T15:00:00Z

{

  "product": {

    "type": "T-Shirt",

    "price": 20.00,

    "sizes": ["S", "M", "L"]

    "reviews": {

      { "username": "user1”, "rating": 4, "created_at": "2023-04-19T12:30:00Z" },

      { "username": "user2”, "rating": 5, "created_at": "2023-05-02T15:00:00Z" }

    }

  }

}

Основные отличия YAML и JSON

Благодаря синтаксису YAML считается, что YAML-файл легче читать, понимать и писать, чем JSON, особенно тем, кто не является разработчиком. Далее мы обсудим другие основные отличия.

Типы данных

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

  • Номер
  • Логическое значение
  • Значение NULL
  • Строка
  • Массив
  • Объект (набор вложенных пар «ключ-значение»)

Формат YAML поддерживает все собственные типы данных любого динамического языка программирования. Например, он поддерживает коллекции вложенных данных, состоящих из последовательностей (списков), скаляров (таких, как числа и строки) и сопоставлений (пар «ключ-значение»). Такая поддержка позволяет создавать более сложные структуры данных. 

Встроенная поддержка

JSON широко используется в сочетании со многими языками программирования. Например, JavaScript предлагает встроенную поддержку анализа JSON. Стандартная библиотека Python также включает JSON, а библиотека JSON встроена в PHP 5.2. Аналогичным образом более 50 других популярных языков поддерживают JSON с помощью различных пакетов и библиотек.

Для сравнения: ни один популярный язык не имеет встроенной поддержки YAML. Для этого разработчики должны устанавливать и использовать библиотеки. Два популярных анализатора YAML: PyYAML для Python и LibYAML для C. 

Управление версиями

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

Комментарии

Формат данных JSON не поддерживает комментарии. Поэтому чтобы их добавить, разработчикам нужно указать пару «ключ-значение» комментария.

В файле YAML комментарии следуют за символом решетки (#).

Когда использовать форматы YAML и JSON

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

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

Но формат YAML завоевал прочные позиции в определенных областях обработки данных благодаря своей читаемости и возможности включения комментариев. Примечательно, что YAML является основным форматом сериализации данных для файлов конфигурации во многих инструментах и сервисах автоматизации, DevOps и Инфраструктуры как кода (IaC). Например, формат YAML часто используется для файлов сервисов Docker и Kubernetes.

Формат YAML также используется для записи файлов конфигурации в следующих инструментах Amazon Web Services (AWS): AWS CloudFormation, Модель бессерверных приложений AWS (AWS SAM) и AWS CodeBuild.

Краткое описание различий YAML и JSON

 

JSON

YAML

Что это

Формат сериализации данных для обмена структурированными данными между программными приложениями и сервисами. Используется приоритетно приложениями, а не человеком. 

Формат сериализации данных для обмена структурированными данными между программными приложениями и сервисами. Используется приоритетно человеком, а не приложениями.

Основные примеры использования:

широко применяется на разных платформах, в распределенных программных средствах связи, веб-приложениях, файлах конфигураций и API, поддерживается многими языками;

файлы конфигураций во многих инструментах и сервисах автоматизации, DevOps и инфраструктуры в виде кода (IaC).

Читабельность

Простота.

Легко читабельный.

Типы данных

Число, логическое значение, значение NULL, строка, массив и объект.

Поддерживает все типы данных с помощью коллекций вложенных данных, которые включают последовательности, скаляры и сопоставления.

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

Нет.

Да.

Поддержка объектов данных в виде значений

Да.

Нет.

Управление версиями

Да, но сразу отсканировать и понять различия между версиями не так просто.

Да, легко сканировать и сразу понимать различия между версиями.

Как AWS обеспечивает соответствие вашим требованиям к форматам YAML и JSON?

Все сервисы интеграции данных AWS могут обрабатывать файлы формата JSON. Ниже представлены три соответствующих сервиса AWS.

  • AWS Glue – это бессерверный сервис интеграции данных. Находите, готовьте и объединяйте данные для аналитики, машинного обучения и разработки приложений с помощью AWS Glue.
  • Amazon Simple Queue Service (Amazon SQS) – сервис полностью управляемых очередей сообщений. Его можно использовать для отправки, хранения и получения сообщений между программными компонентами в любом объеме. Сообщения Amazon SQS могут содержать до 256 КБ текстовых данных, включая форматы XML, JSON, а так же неформатированный текст.
  • Amazon DocumentDB (совместимость с MongoDB) – это полностью управляемая собственная база данных документов формата JSON. Она упрощает и удешевляет эксплуатацию важнейших рабочих нагрузок по обработке документов практически в любых масштабах без необходимости в управлении инфраструктурой.

Аналогично инструменты для разработчиков на AWS поддерживают файлы формата YAML в нескольких сервисах развертывания. Приведем два примера:

  • AWS Step Functions позволяет создавать отказоустойчивые бессерверные рабочие процессы с использованием сервисов AWS, таких как AWS Lambda, Простой сервис уведомлений Amazon (Amazon SNS) и Amazon DynamoDB. Step Functions также поддерживает файлы формата YAML для определения конечных автоматов. Это позволяет описывать рабочие процессы на том же языке, что и ваша Инфраструктура как код (IaC).
  • AWS App2Container – это инструмент командной строки, который можно использовать для переноса и модернизации веб-приложений Java и.NET в формат контейнера. Он генерирует файлы формата YAML для определений задач Amazon Elastic Container Service (Amazon ECS) и развертывания Kubernetes, а также соответствует рекомендациям AWS по безопасности и масштабируемости.

Создайте аккаунт прямо сейчас и начните работу с форматами YAML и JSON на AWS.