Дані JSON (.json)
RFC СтандартJavaScript Object Notation (JSON): це легкий, зрозумілий людині текстовий формат обміну даними, повністю незалежний від мови програмування й широко використовуваний у веб-API.
Конвертувати з JSON у HTML
Безкоштовний конвертер з JSON у HTML у браузері. Миттєво конвертуйте файли на своєму пристрої.
Стиснути JSON онлайн
Приватно - файли ніколи не залишають ваш пристрій
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли JSON, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли JSON, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
7B або 5BПОДАННЯ В ASCII: { або [
Стандартизація: RFC 8259 / ECMA-404 / ISO/IEC 21778
Технічні характеристики
| Архітектура контейнера | Легкий, текстовий, незалежний від мови формат обміну даними |
| Стиснення | Текстове стиснення Gzip / Brotli / Zstandard (зазвичай досягає коефіцієнта 80-90 %) |
| Порядок байтів (Endianness) | Unicode у кодуванні UTF-8 (рекомендовано без маркера послідовності байтів / BOM) |
| Колірні простори | Не застосовується |
| Канали та структура | Шість основних типів даних: об'єкт, масив, рядок, число, булеве значення, null |
| Максимальні розміри | Необмежено; обмежено лише пам'яттю парсера та максимальною довжиною рядка |
| Прозорість | Не застосовується |
| Потокове та прогресивне завантаження | NDJSON (Newline Delimited JSON) / JSON Lines забезпечують поступову обробку потоку. |
Технічна матриця порівняння: JSON проти конкурентів
| Технічний атрибут | JSON (Поточний) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Складність синтаксису | Мінімальна (6 типів, суворий синтаксис) | Висока (на основі відступів, складна специфікація) | Висока (багатослівні закриваючі теги, простори імен) | Бінарний формат передавання даних, визначений схемою |
| Швидкість розбору | Надзвичайно швидкий у всіх сучасних мовах | Повільно (складний розбір відступів) | Від помірної до низької (ресурсоємна побудова DOM) | Ультрашвидкий (бінарна десеріалізація без копіювання) |
| Підтримка коментарів | Ні (навмисно виключено для запобігання розростанню метаданих) | Так (коментарі #) | Так (коментарі <!-- -->) | Так у файлах .proto |
| Обсяг передаваних даних | Компактний текст (дуже високий ступінь стиснення gzip) | Компактний текст | Багатослівний текст (значне повторення тегів) | Ультракомпактний бінарний формат |
Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі
SyntaxError: неочікуваний токен , у JSON на позиції X.
Першопричина: Кінцева кома після останнього елемента в масиві або об'єкті, що є суворо незаконним у JSON за стандартом RFC 8259.
Відновлення: Видаліть кінцеві коми після останніх елементів об'єктів і масивів перед передаванням до JSON.parse().
SyntaxError: неочікуваний токен ' у JSON.
Першопричина: Рядки або ключі взято в одинарні лапки ('') замість подвійних лапок ("").
Відновлення: Замініть усі рядки та ключі в одинарних лапках на стандартні рядки в подвійних лапках.
Аналіз безпеки та векторів атак на парсери
JSON містить лише текст і безпечний щодо прямого виконання коду, але розбір ненадійного JSON може призвести до забруднення прототипу (Prototype Pollution), ReDoS або вичерпання пам’яті.
Відомі вектори атак
- Забруднення прототипу (Prototype Pollution): ключі '__proto__' або 'constructor', що змінюють Object.prototype у застосунках JavaScript.
- Відмова в обслуговуванні через переповнення стека за допомогою глибоко вкладених структур JSON (наприклад, 10 000 відкриваючих дужок).
- Втрата точності числових даних: числа JavaScript, більші за 2^53-1 (9,007,199,254,740,991), непомітно втрачають точність.
Рекомендації щодо захисту: Ніколи не обчислюйте JSON за допомогою eval(). Використовуйте JSON.parse() і очищуйте властивості «__proto__» у рекурсивних функціях злиття об’єктів.
Історичне походження та віхи
Основні переваги
- Зрозуміла людині, самоописова й лаконічна текстова структура.
- Вбудована підтримка розбору в рушіях JavaScript (JSON.parse) та в усіх основних мовах програмування.
- Сувора специфікація запобігає довільному виконанню коду.
Технічні обмеження та недоліки
- Відсутність підтримки коментарів, кінцевих ком або циклічних посилань на об'єкти.
- Відсутність нативних бінарних типів (бінарні дані мають бути закодовані в base64, що збільшує розмір на 33%).
- Неефективна серіалізація порівняно з бінарними форматами, такими як Protocol Buffers або MessagePack.
Цікаві технічні факти
- Дуглас Крокфорд додав до оригінальних інструментів JSMin JSON пункт ліцензії на програмне забезпечення: «Програмне забезпечення має використовуватися на благо, а не на зло».
- JSON є суворою підмножиною синтаксису JavaScript, але до ES2019 неекрановані символи U+2028 та U+2029 були дійсними в JSON, але недійсними в рядках JavaScript.
- Дуглас Крокфорд виявив, що ранні веббраузери могли виконувати JSON безпосередньо як вираз JavaScript, перетворюючи його на об’єкти за допомогою вбудованої функції eval(), до стандартизації окремих API JSON.parse() у ECMAScript 5.
Поширені технічні запитання
Чому JSON не дозволяє використовувати коментарі?
Граматика JSON не допускає коментарів. Реалізації можуть по-різному обробляти розширення та дані, специфічні для застосунку, тому сам формат не гарантує сумісності.
Як зберігати 64-бітні цілі числа в JSON без втрати точності?
Вбудований тип Number у JavaScript: це число з плаваючою комою подвійної точності за стандартом IEEE 754, яке точно підтримує цілі числа лише до 2^53-1. 64-бітні цілі числа (наприклад, ідентифікатори баз даних або часові мітки) потрібно серіалізувати в JSON як рядки (наприклад, «1234567890123456789»).
Яка різниця між JSON та NDJSON / JSON Lines?
Стандартний JSON містить весь корисний вміст в одному кореневому об’єкті або масиві, тому парсерам потрібно завантажити весь текст перед його обробкою. NDJSON (Newline Delimited JSON) розділяє окремі коректні записи JSON символами нового рядка (\n), що дає змогу обробляти величезні набори даних розміром у кілька гігабайтів потоком, рядок за рядком, ефективно використовуючи пам’ять.
Пов'язані пари конвертації JSON
Перетворення даних JSON у вихідний код HTML перетворює сирі структуровані пари «ключ - значення» на зручні для читання людиною вебдокументи, готові до рендерингу в браузері.
Перетворення вихідного коду HTML у дані JSON перетворює зручні для читання вебдокументи на структуровані пари ключ-значення для програмної обробки та передавання до API.
Перетворення текстового скрипту дампу SQL на експорт даних JSON перетворює жорсткі таблиці реляційної бази даних на гнучкі вкладені об'єкти для сучасних вебзастосунків.
Перетворення неструктурованих текстових файлів JSON на структуровані реляційні бази даних SQLite дає змогу швидко індексувати великі обсяги даних і виконувати до них запити.
Конвертація файлів Adobe Swatch Exchange у кольоровий JSON трансформує двійкові палітри дизайну у читабельні текстові об'єкти для сучасних веб-додатків.
Конвертація текстових даних кольорового JSON у двійкові зразки Adobe ASE об'єднує веб-дизайн-токени та професійні додатки для настільного верстання.
Перетворення текстових файлів палітри GIMP на структури Color JSON дає вебзастосункам змогу зчитувати зразки кольорів безпосередньо, без складних сценаріїв розбору.
Перетворення структурованих файлів Color JSON на змінні CSS перетворює необроблені об’єкти даних на нативні властивості стилів для вебсайтів.