Научни JSON данни (.json)

RFC Стандарт

JavaScript Object Notation (JSON) е лек, четим от хора текстов формат за обмен на данни, поддържан от много езици за програмиране и често използван в уеб API.

Конвертиране от JSON към HTML

Безплатен конвертор от JSON към HTML в браузъра. Конвертирайте файлове незабавно на вашето устройство.

Компресирайте JSON онлайн

Поверително - файловете никога не напускат устройството ви

Проверка и метаданни

Операционните системи и файловите анализатори идентифицират JSON файлове чрез проверка на началната двоична байтова последователност:

Изберете или пуснете файлове тук

Поверително - файловете никога не напускат устройството ви

или поставете Ctrl+V
Гаранция за поверителност с нулево мрежово предаване: 0 байта са качени на външни сървъри. Цялата обработка се извършва локално в пясъчниците на вашия браузър.

Байтов подпис на заглавката (сигнатурни байтове)

Операционните системи и файловите анализатори идентифицират JSON файлове чрез проверка на началната двоична байтова последователност:

HEX ПОДПИС (ОФСЕТ 0):

7B or 5B

ASCII ПРЕДСТАВЯНЕ: { 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 (Текущ)YAMLXMLProtocol 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__' в рекурсивни функции за сливане на обекти.

Исторически произход и етапи

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-битовите цели числа (като идентификатори от база данни или времеви отпечатъци) трябва да бъдат сериализирани като низове (напр. '1234567890123456789') в JSON.

Каква е разликата между 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 в структури Color JSON преобразува бинарни дизайнерски палитри в четими текстови обекти за съвременни уеб приложения.

JSON до ASE

Конвертирането на текстови данни в JSON за цветове в бинарни мостри Adobe ASE свързва уеб базираните дизайнерски маркери и професионалните настолни приложения за оформление.

GPL до JSON

Конвертирането на текстови файлове с GIMP палитри в структури Color JSON позволява на уеб приложенията да четат цветни мостри директно без сложни скриптове за парсиране.

JSON до CSS

Конвертирането на структурирани файлове Color JSON в CSS променливи превръща обекти с данни в нативни свойства за стилизиране на уебсайтове.