JSON (JavaScript Object Notation) — це текстовий формат обміну даними, заснований на синтаксисі об'єктів JavaScript. Він використовується повсюдно: від REST API та конфігураційних файлів до зберігання даних у базах та мобільних додатках. За даними офіційного сайту JSON, формат не залежить від мови програмування та підтримується практично всіма сучасними платформами. JSON став стандартом де-факто для передачі даних між клієнтом та сервером.
Головне
JSON — це текстовий формат для представлення структурованих даних, заснований на синтаксисі JavaScript. Незважаючи на походження з JavaScript, формат повністю незалежний від мови — парсери та серіалізатори існують для всіх популярних мов програмування.
Історія JSON почалася на початку 2000-х, коли Дуглас Крокфорд виділив підмножину синтаксису JavaScript для обміну даними. У 2013 році формат був стандартизований як ECMA-404, а пізніше — як ISO/IEC 21778:2017. Назва розшифровується як JavaScript Object Notation.
Основна перевага JSON — мінімалістичний синтаксис. Для опису даних використовується всього шість типів: рядок, число, булевий, null, масив та об'єкт. Цього достатньо для представлення будь-яких структур даних, що використовуються в додатках.
Синтаксис JSON гранично простий: дані представлені парами ключ-значення, де ключ — це рядок у подвійних лапках, а значення — один із шести базових типів. Об'єкти заключаються у фігурні дужки, масиви — у квадратні. Рядки обов'язково використовують подвійні лапки, одинарні лапки недопустимі.
Числа в JSON можуть бути цілими або з плаваючою точкою, додатними або від'ємними, з експоненціальним записом. Булеві значення представлені літералами true та false, а відсутність значення — null. Масиви містять упорядкований набір значень будь-якого типу, включаючи вкладені масиви та об'єкти.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "підтримка вкладеності"
}
}
| Тип | Приклад | Опис |
|---|---|---|
| Рядок | «текст» |
У подвійних лапках, з escape-послідовностями |
| Число | 42 |
Ціле, дробове, експоненціальне |
| Булевий | true |
true або false — без лапок |
| null | null |
Відсутність значення |
| Об'єкт | {} |
Невпорядкований набір пар ключ-значення |
| Масив | [] |
Упорядкований список значень |
JSON є основним форматом обміну даними для REST API в мобільній та веб-розробці. Сервер надсилає JSON у тілі відповіді, клієнт — у тілі запиту. Стандартний заголовок Content-Type для JSON — application/json.
Сучасні REST API використовують JSON для передачі всіх типів даних: від простих списків до складних вкладених структур із зв'язками між сутностями. Клієнтська бібліотека (наприклад, Axios у JavaScript або Retrofit на Android) автоматично серіалізує та десеріалізує JSON, звільняючи розробника від ручного парсингу.
Важлива перевага JSON у REST API — можливість часткової передачі даних (часткова відповідь) через параметри запиту, а також підтримка вкладених ресурсів без додаткових запитів до сервера.
Парсинг JSON на мобільних платформах виконується вбудованими засобами. Android використовує бібліотеки Gson від Google або Moshi від Square, iOS — протокол Codable з JSONDecoder. Кожна платформа надає зручні інструменти для перетворення JSON у нативні об'єкти та назад.
На Android популярний підхід з використанням Gson або Moshi. Достатньо визначити data class з анотаціями @SerializedName і викликати fromJson для десеріалізації. Бібліотека автоматично зіставляє імена полів у JSON з полями класу.
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
На iOS використовується вбудований протокол Codable з JSONDecoder. Структура даних оголошується як struct з протоколом Codable, після чого JSON парситься одним рядком. JSONEncoder виконує зворотну серіалізацію — перетворює об'єкт у JSON для відправлення на сервер.
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON та XML — два основні формати для передачі структурованих даних. JSON виграє у простоті та продуктивності, XML — у строгості та валідації. Вибір між ними залежить від вимог проекту: для REST API частіше обирають JSON, для складних документів зі схемами — XML.
XML вимагає закриваючих тегів для кожного елемента, що збільшує розмір даних у 2-3 рази порівняно з JSON. При цьому XML підтримує простори імен, схеми XSD, атрибути та трансформацію XSLT, що робить його більш потужним для завдань документообігу та інтеграції корпоративних систем.
| Характеристика | JSON | XML |
|---|---|---|
| Синтаксис | Мінімалістичний, ключ-значення | Теговий, відкриваючі та закриваючі теги |
| Розмір даних | Компактний | У 2-3 рази більше JSON |
| Типи даних | Шість базових типів | Тільки текст, типи через схеми |
| Валідація | Немає вбудованої, через JSON Schema | XSD — строга та зріла |
| Простори імен | Немає | Повна підтримка namespace |
| Швидкість парсингу | Висока | Нижча через складність |
Приклади демонструють типові операції з JSON у мобільній розробці: парсинг API-відповідей, створення JSON для відправлення та обробку вкладених структур. Розуміння цих патернів необхідне для будь-якого розробника мобільних додатків.
На JavaScript JSON.stringify перетворює об'єкт у JSON-рядок. Другим аргументом можна передати масив ключів для вибіркової серіалізації або функцію-замінник. Третій аргумент задає відступи для форматування.
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
На Kotlin з бібліотекою Moshi вкладені JSON-об'єкти обробляються через вкладені data класи. Анотація @Json вказує ім'я поля в JSON, якщо воно відрізняється від імені властивості класу. Масиви представляються як List з типом елемента.
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema — це мова опису структури JSON-документа, аналогічна XSD для XML. За допомогою JSON Schema можна задати обов'язкові поля, типи даних, діапазони значень, патерни рядків та вкладену структуру. Валідація за схемою виявляє помилки даних до їх обробки в додатку.
JSON Schema широко використовується в OpenAPI (Swagger) для документування REST API, у формах валідації введення даних та в тестуванні. Файл схеми сам є JSON-документом, що дозволяє використовувати стандартні JSON-парсери для його читання. Існують онлайн-валідатори та бібліотеки для всіх популярних мов програмування.
У мобільній розробці JSON Schema застосовується для валідації відповідей від сервера на етапі тестування та для перевірки конфігураційних файлів. Бібліотеки на зразок network-validator на Android та json-schema-validator дозволяють вбудовувати валідацію прямо в процес розробки, запобігаючи помилкам на ранніх етапах.
Часті запитання
JSON підтримує шість типів: рядок (у подвійних лапках), число (ціле та дробове), булевий (true/false), null, об'єкт (пари ключ-значення в {}) та масив (список значень у []). Цього достатньо для будь-яких структур даних у додатках.
Ні, стандарт JSON не підтримує коментарі. Якщо потрібні коментарі, використовуйте JSON5 (розширений JSON) або додавайте поле з описом, наприклад «_comment»: «пояснення». Деякі інструменти, як VS Code, підтримують коментарі в конфігураційних JSON-файлах, але це нестандартне розширення.
JSONB — це бінарний формат зберігання JSON у PostgreSQL. На відміну від текстового JSON, JSONB швидше обробляється, підтримує індексацію (GIN-індекси) та гарантує унікальність ключів. При цьому JSONB займає більше місця на диску через додавання метаданих.
Використовуйте JSONLint (jsonlint.com) для швидкої перевірки, вбудований JSON.parse() у JavaScript з try-catch, або IDE-плагіни. Валідація включає перевірку коректності лапок, закриття дужок та відповідності типів. Для складних схем використовуйте JSON Schema Validator.
Обмежень немає у специфікації JSON. На практиці розмір обмежений пам'яттю пристрою та можливостями парсера. Для мобільних додатків рекомендується не перевищувати 1-2 МБ на одну відповідь, а для великих даних використовувати пагінацію або потокову передачу.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також