Дані JSON (.json)

RFC Стандарт

JavaScript Object Notation (JSON): це легкий, зрозумілий людині текстовий формат обміну даними, повністю незалежний від мови програмування й широко використовуваний у веб-API.

Конвертувати з JSON у HTML

Безкоштовний конвертер з JSON у HTML у браузері. Миттєво конвертуйте файли на своєму пристрої.

Стиснути JSON онлайн

Приватно - файли ніколи не залишають ваш пристрій

Аналіз та метадані

Операційні системи та аналізатори файлів ідентифікують файли JSON, перевіряючи початкову послідовність бінарних байтів:

Виберіть або перетягніть файли сюди

Приватно - файли ніколи не залишають ваш пристрій

або вставте Ctrl+V
Гарантія конфіденційності без передавання даних мережею: Жодного байта не передано на зовнішні сервери. Уся обробка відбувалася локально в ізольованому середовищі браузера.

Сигнатура заголовка на байтовому рівні (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 (Поточний)YAMLXMLProtocol 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__» у рекурсивних функціях злиття об’єктів.

Історичне походження та віхи

2017RFC 8259 стандартизує UTF-8 як єдине обов'язкове кодування символів для JSON.
2013ECMA-404 визначає синтаксис JSON, який використовують багато мов програмування та платформ.
2001Дуглас Крокфорд описує JSON як засіб для безстанового обміну даними між браузером і сервером.

Основні переваги

  • Зрозуміла людині, самоописова й лаконічна текстова структура.
  • Вбудована підтримка розбору в рушіях 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

Перетворення даних JSON у вихідний код HTML перетворює сирі структуровані пари «ключ - значення» на зручні для читання людиною вебдокументи, готові до рендерингу в браузері.

HTML до JSON

Перетворення вихідного коду HTML у дані JSON перетворює зручні для читання вебдокументи на структуровані пари ключ-значення для програмної обробки та передавання до API.

SQL до JSON

Перетворення текстового скрипту дампу SQL на експорт даних JSON перетворює жорсткі таблиці реляційної бази даних на гнучкі вкладені об'єкти для сучасних вебзастосунків.

JSON до SQLITE

Перетворення неструктурованих текстових файлів JSON на структуровані реляційні бази даних SQLite дає змогу швидко індексувати великі обсяги даних і виконувати до них запити.

ASE до JSON

Конвертація файлів Adobe Swatch Exchange у кольоровий JSON трансформує двійкові палітри дизайну у читабельні текстові об'єкти для сучасних веб-додатків.

JSON до ASE

Конвертація текстових даних кольорового JSON у двійкові зразки Adobe ASE об'єднує веб-дизайн-токени та професійні додатки для настільного верстання.

GPL до JSON

Перетворення текстових файлів палітри GIMP на структури Color JSON дає вебзастосункам змогу зчитувати зразки кольорів безпосередньо, без складних сценаріїв розбору.

JSON до CSS

Перетворення структурованих файлів Color JSON на змінні CSS перетворює необроблені об’єкти даних на нативні властивості стилів для вебсайтів.