Можливо, ви бачили файли з дивними фігурними дужками та двокрапками в коді, або вам доводилося передавати дані між сайтами і не було зрозуміло, як це працює.
У таких випадках ви, найімовірніше, вже мали справу з JSON.
JSON (JavaScript Object Notation) – це текстовий формат для зберігання та обміну даними, який широко використовується у веброзробці та програмуванні.
У цій статті ми розберемось, як виглядає структура JSON, чому він такий популярний і як із ним працювати на практиці. Пояснимо просто і з прикладами, щоб ви могли застосувати ці знання у своїх проєктах.
JSON формат
«ДжЕйсон» чи «ДжейсОн»? JSON чи JSON5? Відповідаємо на ці та багато інших запитань.
JSON (JavaScript Object Notation) – стандартний текстовий формат для зберігання і передачі структурованих даних. Він заснований на синтаксисі об’єкта в JavaScript, але не прив’язаний до нього. Роботу з ним підтримують багато сучасних мов програмування: Python, Java та інші.
До створення формату JSON запити до сервера вимагали постійного оновлення сторінки в браузері. Це уповільнювало роботу сайтів. AJAX-запити, що працюють з JSON-форматом, виконуються у фоновому режимі і не вимагають оновлення сторінки. Завдяки цьому швидкість роботи з веб-ресурсами значно зросла, а JSON став стандартом передачі даних в інтернеті.
Як з’явився JSON
Творцем JSON вважається Дуглас Крокфорд, відомий американський програміст і один із розробників JavaScript. Він автор популярного статичного аналізатора коду JSLint і книжок JavaScript: The Good Parts та How JavaScript Works.
“Я відкрив JSON. Я не стверджую, що винайшов його, оскільки він уже існував у природі. Я просто знайшов його, дав йому назву і розповів, у чому його користь. Я знаю, що є й інші люди, які відкрили його принаймні за рік до мене.
Найперший відомий мені випадок пов’язаний із Netscape – хтось у компанії використовував літерали масивів JavaScript для передавання даних ще 1996 року, тобто щонайменше за п’ять років до того, як я натрапив на цю ідею”. -Дуглас Крокфорд
На початку 2001 року Дуглас Крокфорд і Чіп Морнінгстар заснували компанію State Software. Працюючи над проєктами, вони зіткнулися з проблемою – передача даних між сервером і браузером вимагала постійного оновлення сторінки. Це уповільнювало роботу.
Для розв’язання проблеми тоді використовували різні підходи, наприклад спеціальні плагіни для браузерів на основі Flash або Java-аплетів. Але робота з ними була складною і супроводжувалася частими помилками.
Тоді Крокфорд згадав ідею, яку вперше почув у когось із компанії Netscape, і впровадив об’єкт JavaScript всередину HTML-коду, який передавав повідомлення на сторінку.
Цей код мав відправити повідомлення від дочірнього вікна до батьківського вікна з використанням об’єкта parent. Але він не спрацював, оскільки слово do було зарезервовано в JavaScript. Щоб обійти цю проблему, Крокфорд використовував лапки, уклавши в них усі слова всередині об’єкта.
Так з’явився новий формат, який спочатку хотіли назвати JSML (JavaScript Markup Language), але перемогла назва JSON (JavaScript Object Notation).
У 2001 році Крокфорд створив вебсторінку з описом цього формату, щоб усі розробники могли його використовувати у своїй роботі.
“Розробляючи JSON, я прагнув до мінімалізму. Моя ідея полягала в тому, що що менше питань нам доведеться узгоджувати, то вищою є ймовірність, що нам буде просто взаємодіяти один з одним. Я хотів, щоб стандарт JSON вміщався на зворотному боці візитної картки”.- Дуглас Крокфорд.
JSON відрізнявся від своїх конкурентів – XML, CSV і YAML – простотою синтаксису і невеликим розміром файлів, що було зручно при роботі з вебом. Завдяки цьому він швидко набирав популярність.
У 2014 році орган зі стандартизації ECMA прийняв JSON і офіційно специфікував його. Сьогодні цей формат є основним для передачі даних під час взаємодії веб-сервера і браузера.
У цьому розділі відповімо і на головне питання розробників – як вимовляти JSON? Є два варіанти – з наголосом на «е» і на «о». Найкраще на це відповість один із розробників формату – Чіп Морнінгстар:
«Багато людей говорять “ДжейсОн”, що мене завжди тішить. Щоразу, коли я перебуваю на зустрічі і хтось каже «ДжейсОн», я відповідаю «ДжЕйсон». Вони запитують: «Звідки ти знаєш?» А я їм відповідаю: «Ну, тому що це я придумав».
Переваги JSON
JSON не єдиний формат передачі даних. Деякі розробники використовують XML або YAML. Але порівняно з ними у JSON є низка переваг:
Простий і легко читабельний синтаксис, який зрозумілий і комп’ютеру, і людині. Необов’язково навіть розбиратися в JavaScript, щоб навчитися записувати та читати дані. Скоро ви це побачите самі.
Легкість і компактність. JSON-файли важать менше, ніж файли інших форматів, і завантажуються швидше. Згідно з деякими дослідженнями, сучасні браузери обробляють JSON у десятки разів швидше за XML.
Відсутність залежності від конкретної мови програмування. Для роботи з JSON можна використовувати майже будь-яку популярну мову програмування, наприклад Python або Java.
Універсальність у типах даних. JSON можна використовувати для зберігання масивів, упорядкованих списків і колекцій пар «ключ – значення». Але і це не все. Формат підходить для представлення складних структур даних, включно з деревами та ієрархічними структурами.
Широка підтримка в браузерах. Усі сучасні браузери підтримують роботу з JSON.
Самостійне документування. У JSON можна включити метадані, які описують представлені дані, спрощуючи роботу з ними.
Структура і синтаксис JSON
Синтаксис JSON повторює синтаксис звичайного об’єкта в JavaScript: дані записуються у вигляді пар «ключ – значення» і розділяються комами. Важливо запам’ятати, що після останньої пари кома не ставиться – це поширена помилка, яку можна довго шукати.
Ключі – рядкові змінні, а значення можуть бути рядками, числами, булевими значеннями, об’єктами, масивами або null. Функції та дати у звичайному JSON не підтримуються.
Попри початкову прив’язку формату до JavaScript, специфікація JSON допускає речі, які неприпустимі в JavaScript-коді. Наприклад, у JSON символи поділу рядків і абзаців можна вказувати без екранування.
Для роботи з датами в JSON необхідно переводити їх у рядковий формат відповідно до стандарту ISO 8601.
З детальним описом вимог до синтаксису JSON можна ознайомитися на сайті Datatracker. Для перевірки правильності синтаксису або його форматування відповідно до правил існує безліч онлайн-валідаторів, наприклад JSON Validator.
Об’єкти та масиви JSON
Для зберігання даних у JSON використовуються дві структури – об’єкти та масиви.
Об’єкти – невпорядкована колекція. Для них не принципово, в якому порядку йдуть пари «ключ – значення». Тобто їх можна міняти місцями. Але будьте обережні! Коли розробник переміщує пару «ключ – значення» з будь-якого місця на останню, часто забуває видалити кому, що призводить до помилки.
Об’єкт JSON дуже схожий на об’єкт у JavaScript, але ключ завжди має бути в лапках.
Масиви – упорядкований список значень.
На відміну від об’єкта, порядок елементів у масиві важливий. Тут немає ключів, тому звертатися до значень ми можемо тільки за індексом елемента. Важливо пам’ятати, що у першого елемента індекс 0.
Об’єкти та масиви можуть бути вкладені один в одного, а кількість рівнів вкладеності не обмежена.
JSON5
JSON5 – це розширення стандарту JSON, що підвищує читабельність і зручність написання JSON-даних. Крім цього, він додає нові можливості, наприклад використання коментарів, яких немає в самому стандарті.
JSON Schema
Для опису та перевірки даних у форматі JSON є спеціальна мова JSON Schema.
Розробник не знає, які з цих полів є обов’язковими, до якого типу даних можуть належати значення тощо. JSON Schema дає змогу додати необхідні метадані, або «правила» для цієї інформації, і описати, які поля мають бути заповнені та що вони можуть містити.
JSON Schema використовується для валідації даних під час обміну інформацією між різними системами або під час роботи з даними, одержуваними від користувачів. Якщо нові дані не відповідають заданій схемі, то розробник швидко дізнається про помилку і зможе уважно вивчити інформацію, виправивши її або запросивши оновлення.
Завдяки цьому код стає надійним, передбачуваним і стійким до помилок, даючи змогу явно визначати вимоги до подання даних.
Розберемо код порядково:
- у першому рядку вказано посилання на версію специфікації JSON Schema;
- дані мають бути об’єктом типу «object»;
- об’єкт має містити три обов’язкові поля: «name», “age” і «address»;
- у кожного поля свій тип даних: «string» для імені, «number» для віку і “object” для адреси;
поле «address» має бути об’єктом і містити два обов’язкових підполя: «city» і «zip», які належать до рядків.
Як працювати з JSON
Уміння працювати з JSON-файлами – одна з базових навичок для розробників, оскільки саме цей формат є стандартом для обміну даними у веб- та мобільних додатках.
Як правило, робота з JSON зводиться до двох дій: серіалізації та десеріалізації. Поговоримо про них докладніше.
Серіалізація – це перетворення даних із внутрішнього формату, наприклад із JavaScript-об’єкта, у формат JSON, який може бути відправлений на сервер. У більшості мов програмування для цього є вбудовані функції або бібліотеки.
Десеріалізація, навпаки, перетворює дані з формату JSON назад у внутрішній формат, з яким програміст може працювати у своєму коді.
Що запам’ятати
Згадаймо все, що ми дізналися про JSON:
- JSON – стандартний текстовий формат для зберігання структурованих даних та обміну ними. Найчастіше використовується в інтернеті.
- Дані в JSON представлені у вигляді пар «ключ – значення».
- Для зберігання даних у JSON використовуються дві структури – об’єкти та масиви. Об’єкти – невпорядкована колекція, масиви – впорядкована.
- JSON5 розширює можливості формату, але поки що не підтримується браузерами.
- JSON Schema використовується для визначення вимог до даних: розробник може вказати обов’язкові поля та їхні допустимі формати.
- Для роботи з JSON використовують два основні підходи: серіалізація, що дає змогу перетворити JavaScript-код або код іншої мови програмування на JSON-формат, і десеріалізація, яка працює навпаки: з JSON формату дані переводять у формат JSON.
Висновок
JSON використовується всюди, де потрібно передавати дані між різними частинами системи – наприклад, між сервером і браузером.
Він має просту, зрозумілу структуру, легко читається, підтримується більшістю мов програмування та допомагає швидко обробляти інформацію. Це зручно як для початківців, так і для досвідчених розробників.








