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

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: Проверете входа си“, вместо техническо съобщение от синтактичния анализатор с точната позиция на символа. Вградената в браузърите 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 или composer.json, за прочитане на данни, копирани от локалното хранилище или конзолата на браузър, и за разбиране на структурата на набор от данни, получен от друга система.

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

  • Инструменти за разработчици в браузъра: Chrome, Edge и Firefox форматират автоматично отговорите в JSON в панела за визуализация на раздела Network.
  • Редактори на код: Visual Studio Code форматира отворен JSON файл с Alt+Shift+F (Shift+Option+F на Mac). Повечето редактори имат еквивалентна клавишна комбинация или разширение за форматиране.
  • Команден ред: 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

И двата подхода анализират текста до естествена за езика структура от данни и след това го сериализират отново с интервали. Това се пише лесно, но може да промени числата. JavaScript съхранява всяко число като число с двойна точност, така че 9007199254740993 се получава обратно като 9007199254740992. Python запазва целите числа точно, защото целите числа в Python нямат ограничение за размера, но все пак пренаписва 1.0e2 като 100.0 и превръща 1e999 в Infinity, което не е валиден JSON. Приложенията, които се нуждаят от точни големи цели числа, например идентификатори на записи в база данни, често ги съхраняват като низове в JSON, а не като числа.

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

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

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

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

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

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

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

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

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

Източници

  1. RFC 8259 — Формат за обмен на данни JavaScript Object Notation (JSON)
  2. MDN Web Docs: JSON
  3. json.org