- docx (формат Microsoft Word);
- PDF (формат Adobe);
- mobi (зазвичай використовується у пристроях Amazon Kindle);
- та ще багато всього (ePub, djvu, fb2...).
JSON
JavaScript Object Notation. З ним ти вже трохи знайомий! Ми говорабо про нього ось у цій лекції , а серіалізацію в JSON розглядали ось тут . Свою назву він одержав не просто так. Об'єкти Java, перетворені на JSON, дійсно виглядають так само, як об'єкти в мові JavaScript. Тобі зовсім не потрібно знати JavaScript, щоб зрозуміти зміст нашого об'єкта:{
"title": "Война и мир",
"author": "Лев Толстой",
"year": 1869
}
Не обов'язково передавати один об'єкт. JSON може містити і масив об'єктів:
[
{
"title": "Война и мир",
"author": "Лев Толстой",
"year": 1869
},
{
"title": "Бесы",
"author": "Федор Достоевский",
"year": 1872
},
{
"title": "Чайка",
"author": "Антон Чехов",
"year": 1896
}
]
Оскільки JSON є об'єктом JavaScript, він підтримує такі формати даних JavaScript:
- рядки (string);
- числа (number);
- об'єкти (object);
- масиви (array);
- boolean-значення (true та false);
- null.
-
Human-readable («людяно-читаний») формат. Це очевидна перевага, якщо ваш кінцевий користувач — людина. Наприклад, на сервері зберігається база даних з розкладом авіаперельотів. Чоловік запитує дані з цієї бази за допомогою веб-програми, сидячи вдома за комп'ютером. Оскільки тобі потрібно надати дані у форматі, який він зможе зрозуміти, JSON буде чудовим рішенням.
-
Простота. Можна сказати - елементарність :) Вище ми навели приклад двох JSON-файлів. І навіть якщо ти взагалі не чув про існування JavaScript (і особливо про його об'єкти), ти легко зрозумієш, що за об'єкти там описані.
Вся документація JSON – це одна веб-сторінка з кількома картинками. -
Широка поширеність. JavaScript - домінуюча мова фронтенду, і він диктує свої умови. Використання JSON – необхідність. Тому величезна кількість веб-сервісів використовують JSON як формат обміну даними. Кожна сучасна IDE підтримує JSON-формат (зокрема Intellij IDEA). Для роботи з JSON написано купу бібліотек для всіх можливих мов програмування.
YAML
На початку свого існування розшифровувався як Yet Another Markup Language - "ще одна мова розмітки". Тоді його позиціонували як конкурента XML. Зараз же, з часом, він розшифровується як "YAML Ain't Markup Language" ("YAML - не мова розмітки"). Що ж він із себе уявляє? Давай уявімо, що нам потрібно створити 3 класи персонажів для нашої комп'ютерної гри: Воїн, Маг і Злодій. Вони будуть такі характеристики: сила, спритність, витривалість, набір зброї. Ось як виглядатиме наш YAML-файл із описом класів:classes:
class-1:
title: Warrior
power: 8
agility: 4
stamina: 7
weapons:
- sword
- spear
class-2:
title: Mage
power: 5
agility: 7
stamina: 5
weapons:
- magic staff
class-3:
title: Thief
power: 6
agility: 6
stamina: 5
weapons:
- dagger
- poison
YAML-файл має деревоподібну структуру: одні елементи вкладені інші. Вкладеністю ми можемо керувати за допомогою деякої кількості прогалин, яким позначаємо кожен рівень. Які ж переваги має YAML-формат?
-
Human-readable. Знову ж таки, навіть побачивши yaml-файл без опису, ти легко зрозумієш, які об'єкти там описані. YAML наскільки добре читається людиною, що головна сторінка yaml.org це звичайний yaml-файл :)
-
Компактність. Структура файлу формується за рахунок прогалин: немає необхідності використовувати дужки або лапки.
-
Підтримка структур даних, «рідних» мов програмування. Величезна перевага YAML перед JSON та багатьма іншими форматами полягає в тому, що він підтримує різні структури даних. В тому числі:
-
!!map
Неупорядкований набір пар ключ: значення без можливості дублікатів; -
!!omap
Упорядкована послідовність пар ключ: значення без можливості дублікатів; -
!!pairs:
Упорядкована послідовність пар ключ: значення з можливістю дублікатів; - !!set
Неупорядкована послідовність значень, які не рівні один одному; - !!seq
Послідовність довільних значень;
Деякі з цих структур знайомі тобі за Java! :) За рахунок цієї фічі у форматі YAML можна серіалізувати різні структури даних з мов програмування.
-
-
Можливість використання anchor та alias
Переклад слів "anchor" і "alias" - "якір" і "псевдонім". У принципі він досить точно описує суть цих термінів в YAML.
Вони дозволяють тобі ідентифікувати якийсь елемент у yaml-файлі і посилатися на нього в інших частинах цього файлу, якщо він зустрічається повторно. Anchor створюється за допомогою символу
&
, а або за допомогою*
.Припустимо, у нас є файл із описом книг Льва Толстого. Щоб не писати ім'я автора щоразу вручну, ми просто створимо якір «leo» і посилатимемося на нього за допомогою аліасу, коли нам це буде потрібно:
books: book-1: title: War and Peace author: &leo Leo Tolstoy year: 1869 book-2: title: Anna Karenina author: *leo year: 1873 book-3: title: Family Happiness author: *leo year: 1859
Коли ми зчитуватимемо цей файл якимось парсером, на місці нашого аліасу в потрібних місцях буде підставлятися значення «Leo Tolstoy».
- У YAML можна вбудувати дані в інших форматах. Наприклад, JSON:
books: [ { "title": "War and Peace", "author": "Leo Tolstoy", "year": 1869 }, { "title": "Anna Karenina", "author": "Leo Tolstoy", "year": 1873 }, { "title": "Family Happiness", "author": "Leo Tolstoy", "year": 1859 } ]
Інші формати серіалізації
XML
Цей формат ґрунтується на так званому дереві тегів.<book>
<title>Harry Potter and the Philosopher’s Stone</title>
<author>J. K. Rowling</author>
<year>1997</year>
</book>
Кожен елемент складається з тега, що відкриває і закриває (<> і </>). Кожен елемент може мати вкладені елементи. XML — поширений формат, що не поступається JSON та YAML (якщо говорити про використання у реальних проектах). Про XML у нас є окрема лекція .
BSON (binary JSON)
Як і з його назви, дуже схожий на JSON, але не є human-readable і оперує даними в двійковому форматі. За рахунок цього він дуже зручний при зберіганні та передачі зображень та інших вкладень. Крім того, BSON підтримує деякі типи даних, недоступні у JSON. Наприклад, у BSON-файл можна записати дату (у форматі мілісекунд) або навіть шматок JavaScript коду. Популярна NoSQL база даних MongoDB зберігає інформацію саме у форматі BSON.Position based protocol
У деяких ситуаціях нам необхідно різко знизити кількість даних, що передаються (наприклад, якщо даних дуже багато і потрібно зменшити навантаження). У цій ситуації ми можемо використовувати position based protocol , тобто передавати значення параметрів без назв самих параметрів."Leo Tolstoy" | "Anna Karenina" | 1873
Дані в такому форматі займають менше місця, ніж повноцінний JSON файл. Звичайно, існують і інші формати серіалізації, але тобі зараз не потрібно знати їх усі :) Добре, якщо ти будеш знайомий з тими форматами, які зараз є промисловим стандартом при розробці додатків, і пам'ятатимеш їх переваги та відмінності один від одного. А наша лекція на цьому добігла кінця:) Не забудь вирішити пару завдань сьогодні! До нових зустрічей! :)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ