Прескочи към съдържанието

JSON Форматиращ инструмент: Подобряване и Валидиране на JSON Онлайн Безплатно

Форматирайте компресиран JSON незабавно с правилен отстъп. Безплатен онлайн JSON форматиращ инструмент, който валидира синтаксис, подобрява кода и прави отстраняването на грешки по-бързо. Работи в браузъра с форматиране в реално време.

JSON Форматиращ инструмент

Форматирайте и подобрете JSON с този лесен инструмент - форматирането се извършва автоматично докато пишете!

Форматираният JSON ще се покаже тук автоматично...

Калкулатор за зареждане...
📚

Документация

Какво представлява форматиращ инструмент за JSON?

Форматиращият инструмент за JSON е средство, което взема текст във формат JSON (JavaScript Object Notation) и го пренаписва с отстъпи и нови редове, без да променя самите данни. JSON е текстов формат за съхранение и изпращане на структурирани данни, изграден от двойки име/стойност и списъци. Програмите обикновено пестят място, като премахват всички излишни интервали, което дава един плътен ред, труден за четене от човек. Форматиращият инструмент, наричан още инструмент за преформатиране за по-добра четимост, връща тези интервали по последователен начин, така че структурата да се вижда. Този инструмент форматира JSON автоматично, докато се въвежда или поставя, без бутони за натискане.

Правила за синтаксиса на JSON

JSON е дефиниран в спецификация, наречена RFC 8259. Тя има два типа контейнери:

Обектите съдържат двойки име/стойност във фигурни скоби:

1{"name": "John", "age": 30, "city": "New York"}
2

Масивите съдържат подредени списъци в квадратни скоби:

1["apple", "banana", "cherry"]
2

Стойността в JSON трябва да бъде един от шест типа: низ, число, булева стойност (true или false), null, обект или масив.

Няколко правила са причина за повечето грешки:

  • Имената на свойствата трябва да са оградени с двойни кавички. {name: "John"} е невалидно; трябва да бъде {"name": "John"}.
  • Низовете трябва да използват двойни, а не единични кавички.
  • След последния елемент в обект или масив не може да има запетая (без завършващи запетаи).
  • JSON няма синтаксис за коментари, въпреки че видът му с фигурни и квадратни скоби произлиза от JavaScript.
  • JSON няма undefined. За липсваща стойност използвайте null.

Честа грешка е поставянето на литерал на JavaScript обект вместо JSON. {name: 'John', age: undefined} е валиден JavaScript, но не и валиден JSON. Версията в JSON е {"name": "John", "age": null}.

Как работи този форматиращ инструмент за JSON

Много форматиращи инструменти за JSON прекарват текста през JSON.parse(), за да построят JavaScript обект, след което изпълняват JSON.stringify(), за да го превърнат обратно в текст с интервали. Това двойно преобразуване има страничен ефект: числата в JavaScript са числа с плаваща запетая с двойна точност по IEEE 754, които не могат да представят точно всяко цяло число, щом надвишат 2^53 − 1 (9,007,199,254,740,991). Идентификатор като 9007199254740993 може да се превърне в 9007199254740992 след това преобразуване.

Този инструмент избягва тази стъпка. Той прочита входа символ по символ с малък ръчно написан синтактичен анализатор и вместо да преобразува всяко число или низ в JavaScript стойност, копира съответния текст точно както е написан, след което го поставя на правилното ниво на отстъп. Тъй като числата никога не се преобразуват в числа с плаваща запетая, целите числа с произволен размер запазват точните си цифри. Ако един обект съдържа един и същ ключ, записан два пъти, и двата екземпляра се запазват на място, вместо да се слеят до последния, както би станало при създаване на JavaScript обект.

Процесът, стъпка по стъпка:

  1. Прочетете следващия токен (обект, масив, низ, число, true, false или null).
  2. Проверете го спрямо граматиката на JSON. Отхвърлете го, ако нарушава правило, например ако ключът е без кавички или има завършваща запетая.
  3. Копирайте текста на токена непроменен в изхода.
  4. Добавете нов ред и отстъп от 2 интервала за всяко ниво на влагане в обект или масив.
  5. Повтаряйте, докато целият вход бъде прочетен.

Отстъпът е фиксиран на 2 интервала; няма настройка за промяната му. Ако входът е празен, нищо не се показва. Ако входът нарушава правило на JSON, инструментът показва съобщението „Невалиден JSON: Проверете въведеното“, а не техническо съобщение на синтактичния анализатор с точната позиция на знака. Вграденият в браузърите JSON.parse(), напротив, посочва позиция на знака в текста на грешката.

Пример с решение

Този минимизиран вход:

1{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}
2

се превръща в:

1{
2  "name": "John Doe",
3  "age": 30,
4  "address": {
5    "street": "123 Main St",
6    "city": "Anytown",
7    "state": "CA"
8  },
9  "hobbies": [
10    "reading",
11    "hiking",
12    "photography"
13  ]
14}
15

Всеки вложен обект или масив има едно ниво повече отстъп спрямо родителя си, така че връзката между address и трите му полета се вижда с един поглед.

Втори пример показва защо е важно литералите да се копират. Този вход:

1{"id":9007199254740993}
2

се форматира така:

1{
2  "id": 9007199254740993
3}
4

Цифрите остават точно както са въведени. Форматиращ инструмент, изграден върху JSON.parse(), последвано от JSON.stringify(), вместо това би превърнал незабелязано числото в 9007199254740992.

Често срещани грешки в JSON

  • Име на свойство без кавички: {name: "John"}. Поправка: {"name": "John"}.
  • Крайна запетая: {"age": 30,}. Поправка: премахнете запетаята преди затварящата скоба.
  • Несъответстващи скоби: {"data": [1, 2}. Поправка: затворете масива с ], преди да затворите обекта.
  • Незатворен низ: {"name": "John}. Поправка: добавете липсващата затваряща кавичка.
  • Единични кавички: {'name': 'John'}. Поправка: използвайте двойни кавички.
  • undefined, NaN или Infinity: нито една от тези стойности не е валидна стойност в JSON. Използвайте null или низ.

Честа причина за тези грешки е копирането на обект директно от конзолата на браузъра или от сървърен журнал, които често съдържат синтаксис само за JavaScript и изискват почистване, преди да станат валиден JSON.

Кога да използвате форматиращ инструмент за JSON

Форматиращите инструменти за JSON се използват най-често за преглед на отговори на API, които обикновено се изпращат в минимизиран вид, за да се пести честотна лента. Използват се и за ръчна проверка на конфигурационни файлове като package.json или tsconfig.json, за четене на данни, копирани от локалното хранилище или конзолата на браузъра, и за разбиране на структурата на набор от данни, получен от друга система.

Други начини за форматиране на JSON

  • Инструменти за разработчици в браузъра: Chrome, Edge и Firefox форматират автоматично отговорите в JSON в панела за визуализация на раздела Network.
  • Редактори на код: Visual Studio Code форматира отворен JSON файл с Shift+Alt+F в Windows, Shift+Option+F на Mac или Ctrl+Shift+I в Linux. Повечето редактори имат равностоен пряк път или разширение за форматиране.
  • Команден ред: jq (jq . file.json) и вграденият в Python python -m json.tool file.json форматират JSON от терминал.

Вграждане на форматирането на JSON в код

Повечето езици за програмиране включват библиотека за JSON с опция за отстъп. В JavaScript:

1const formatted = JSON.stringify(JSON.parse(rawJson), null, 2);
2

В Python:

1import json
2formatted = json.dumps(json.loads(raw_json), indent=2)
3

И двата подхода анализират текста в собствена структура от данни и след това я сериализират отново с интервали. Както е показано по-горе, това е лесно за писане, но може да промени големи цели числа, защото и двата езика по подразбиране съхраняват числата като числа с двойна точност. Приложенията, които се нуждаят от точни големи цели числа, като идентификаторите в база данни, обикновено ги съхраняват в JSON като низове, а не като числа.

Кратка история на JSON

Дъглас Крокфорд описва JSON в началото на 2000-те години, като заимства синтаксиса му от обектните литерали в JavaScript, но го прави използваем от всеки език. RFC 4627 го формализира през 2006 г.. Той се разпространява бързо, защото е по-кратък за писане от XML и се съпоставя директно с обектите в JavaScript, което има значение, когато уеб приложенията започват да зареждат данни във фонов режим, вместо да презареждат цели страници. До 2010-те години се използва широко от уеб API.

Често задавани въпроси

Какво представлява форматиращ инструмент за JSON? Инструмент, който добавя отстъпи, нови редове и интервали към текста в JSON, така че структурата му да се чете лесно, без да променя данните.

Променя ли форматирането данните? Не. Форматирането променя само интервалите. Този инструмент копира всеки низ и число точно както са въведени, така че стойностите във форматирания изход съвпадат напълно с входа, включително числа, твърде големи, за да бъдат съхранени точно като число в JavaScript.

Защо получавам грешка „Невалиден JSON“? Входът нарушава правило на JSON. Чести причини са имена на свойства без кавички, завършваща запетая, единични кавички, незатворен низ или несъответстваща скоба. Този инструмент не показва точната позиция на проблема; проверката на входа спрямо изброените по-горе правила обикновено го открива бързо.

Може ли JSON да съдържа коментари? Не. Спецификацията не ги допуска. Формати като JSONC и JSON5 добавят поддръжка на коментари върху синтаксиса на JSON за случаи, в които това е полезно, например при конфигурационни файлове.

Какъв е стандартният отстъп в JSON? Два интервала са често срещана конвенция и именно това използва този инструмент. Някои ръководства за стил използват четири интервала или табулации; самата спецификация на JSON не изисква определен отстъп.

Каква е разликата между JSON.parse() и JSON.stringify()? JSON.parse() превръща JSON низ в JavaScript стойност. JSON.stringify() прави обратното — превръща JavaScript стойност в JSON низ и приема аргумент за отстъп при четимо отпечатване. Този инструмент не използва нито една от двете функции вътрешно, което му позволява да запазва големите цели числа точно.

Източници

  1. Работна група за интернет инженеринг (IETF). RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259 — стойност в JSON е обект, масив, число, низ, true, false или null; между токените са разрешени само празни знаци.
  2. Мрежа за разработчици на Mozilla. JSON.parse(). Справка за JSON.parse() — масивите и обектите не могат да имат завършващи запетаи; съобщението за грешка посочва позиция.
  3. Мрежа за разработчици на Mozilla. Number.MAX_SAFE_INTEGER. Справка за Number.MAX_SAFE_INTEGER — най-голямото безопасно цяло число е 2^53 − 1 = 9,007,199,254,740,991.
  4. Работна група за интернет инженеринг (IETF). RFC 4627: The application/json Media Type for JavaScript Object Notation (JSON). RFC 4627 — първият RFC за JSON, от Д. Крокфорд, юли 2006 г.
  5. Microsoft. Editing JSON with Visual Studio Code. Документация на VS Code за JSON — пряк път за „Форматиране на документ“ за всяка платформа.
  6. Python Software Foundation. json — JSON encoder and decoder. Документация на Python за json — python -m json.tool форматира JSON за четене от командния ред.