Научни JSON данни (.json)
RFC СтандартJavaScript Object Notation (JSON) е лек, четим от хора текстов формат за обмен на данни, поддържан от много езици за програмиране и често използван в уеб API.
Конвертиране от JSON към HTML
Безплатен конвертор от JSON към HTML в браузъра. Конвертирайте файлове незабавно на вашето устройство.
Компресирайте JSON онлайн
Поверително - файловете никога не напускат устройството ви
Проверка и метаданни
Операционните системи и файловите анализатори идентифицират JSON файлове чрез проверка на началната двоична байтова последователност:
Байтов подпис на заглавката (сигнатурни байтове)
Операционните системи и файловите анализатори идентифицират JSON файлове чрез проверка на началната двоична байтова последователност:
HEX ПОДПИС (ОФСЕТ 0):
7B or 5BASCII ПРЕДСТАВЯНЕ: { or [
Стандартизация: RFC 8259 / ECMA-404 / ISO/IEC 21778
Технически спецификации
| Контейнерна архитектура | Лек, текстов формат за обмен на данни, независим от езика за програмиране |
| Компресия | Текстът в JSON може да се компресира с Gzip, Brotli и Zstandard; крайният размер зависи от данните и настройките. |
| Поредност на байтовете (Endianness) | Unicode, кодиран в UTF-8 (препоръчва се без маркер за последователност на байтовете / BOM). |
| Цветови пространства | Неприложимо |
| Канали и структура | Шест основни типа данни: обект, масив, низ, число, булева стойност и null. |
| Максимални размери | Неограничено; ограничено единствено от паметта на парсера и максималната дължина на низа |
| Прозрачност | Неприложимо |
| Поточно предаване и прогресивно зареждане | NDJSON (Newline Delimited JSON) / JSON Lines позволява прогресивна обработка в потоци |
Техническа сравнителна матрица: JSON спрямо конкуренти
| Технически атрибут | JSON (Текущ) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Сложност на синтаксиса | Минимална (6 типа, строг синтаксис) | Висока (базирана на отстъпи, сложна спецификация) | Висока (многословни затварящи тагове, пространства от имена) | Двоичен мрежов формат, дефиниран със схема |
| Производителност при анализ | Изключително бърз във всички модерни езици | Бавен (сложен анализ на отстъпите) | Умерено бавен до бавен (тежко изграждане на DOM) | Ултрабърз (двоична десериализация без копиране) |
| Поддържани коментари | Не (умишлено изключена за предотвратяване на натрупването на метаданни) | Да (# коментари) | Да (<!-- коментари -->) | Да в .proto файлове |
| Размер на данните, предавани по мрежата | Компактен текст; резултатите от компресирането зависят от данните и настройките. | Компактен текст | Многословен текст (тежко повтаряне на тагове) | Ултракомпактен двоичен |
Често срещани видове повреди и ръководство за възстановяване на шестнадесетични данни
Грешка SyntaxError: неочакван токен „,“ в JSON на позиция X.
Първопричина: Излишна запетая след последния елемент в масив или обект, която е строго забранена в RFC 8259 JSON.
Възстановяване: Премахнете излишните запетаи от ключовете на обектите и елементите на масивите, преди да ги подадете към JSON.parse().
Грешка SyntaxError: неочакван токен „'“ в JSON.
Първопричина: Низове или ключове, затворени в единични кавички ('') вместо двойни кавички ("").
Възстановяване: Заменете всички низове и ключове в единични кавички със стандартни низове в двойни кавички.
Анализ на сигурността и вектори на атака към парсера
JSON съдържа само текст и е безопасен срещу директно изпълнение на код, но анализът на недоверен JSON може да доведе до замърсяване на прототипи (Prototype Pollution), ReDoS или изчерпване на паметта.
Известни вектори на атака
- Замърсяване на прототипи (Prototype Pollution): Ключове с име '__proto__' или 'constructor', променящи Object.prototype в JavaScript приложения.
- Оказване на отказ от услуга (DoS) чрез препълване на стека посредством дълбоко вложени 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-битовите цели числа (като идентификатори от база данни или времеви отпечатъци) трябва да бъдат сериализирани като низове (напр. '1234567890123456789') в JSON.
Каква е разликата между JSON и NDJSON / JSON Lines?
Стандартният JSON обгръща целия полезен товар в един единствен коренов обект или масив, което изисква парсерите да заредят целия текст, преди да го оценят. NDJSON (Newline Delimited JSON) разделя отделните валидни JSON записи със символи за нов ред (\n), което позволява ефективен по отношение на паметта потокова обработка ред по ред на масивни набори от данни с размер от няколко гигабайта.
Свързани двойки за конвертиране на JSON
Конвертирането на JSON данни в HTML изходен код преобразува сурови структурирани двойки ключ-стойност в четими от хора уеб документи, готови за визуализиране в браузър.
Конвертирането на HTML изходен код в JSON данни преобразува четими от хора уеб документи в структурирани двойки ключ-стойност за програмна обработка и приемане от API.
Конвертирането на текстов скрипт с SQL файл с команди в JSON експорт преобразува таблиците на релационни бази данни в гъвкави, вложени обекти за съвременни уеб приложения.
Преобразуването на неструктурирани JSON текстови файлове в структурирани SQLite релационни бази данни позволява бързо индексиране и заявки към големи записи от данни.
Конвертирането на файлове Adobe Swatch Exchange в структури Color JSON преобразува бинарни дизайнерски палитри в четими текстови обекти за съвременни уеб приложения.
Конвертирането на текстови данни в JSON за цветове в бинарни мостри Adobe ASE свързва уеб базираните дизайнерски маркери и професионалните настолни приложения за оформление.
Конвертирането на текстови файлове с GIMP палитри в структури Color JSON позволява на уеб приложенията да четат цветни мостри директно без сложни скриптове за парсиране.
Конвертирането на структурирани файлове Color JSON в CSS променливи превръща обекти с данни в нативни свойства за стилизиране на уебсайтове.