JSON formatter и валидатор

Acrafto Team Разработчици
Актуализирано
Очакват се входни данни. Поставете JSON по-горе или пуснете файл .json.

Поставете произволен JSON в полето по-горе и този JSON formatter и валидатор ще го провери още докато пишете. Валидните данни се форматират с избрания отстъп или се минифицират в един ред. При невалидни данни получавате точно съобщение за грешка с ред и колона, откъс с маркирания знак, а за най-честите грешки и поправка с един клик. Всичко работи във вашия браузър, така че отговорите от API, конфигурационните файлове и експортите никога не напускат компютъра ви.

Какво прави този JSON formatter

  • Форматира JSON с 2 интервала, 4 интервала или табулации. Резултатът запазва оригиналния ред на ключовете, освен ако не отметнете Сортирай ключовете.
  • Минифицира JSON, като премахва всички интервали и нови редове. Показателят за размер под резултата показва колко байта сте спестили.
  • Валидира JSON в реално време според RFC 8259, действащия стандарт за JSON. Редът за състоянието става зелен в момента, в който документът е коректен.
  • Поправя автоматично честите грешки: излишни запетаи, единични кавички, ключове без кавички, коментари, True, None и NaN в стил Python, числа като .5 или +1.
  • Зарежда файлове с бутона Отвори файл или когато пуснете файл .json върху полето за вход. След това можете да изтеглите резултата или да го върнете във входа за още една обработка.

JSON валидатор: съобщението за грешка е по-важно от червения цвят

Повечето онлайн валидатори казват само, че нещо не е наред. Браузърите не са много по-добри: JSON.parse в Chrome съобщава Unexpected token } in JSON at position 148, Firefox казва expected property name or '}', и никой от двата не ви казва на кой ред да търсите. Този инструмент има собствен парсер, който помни къде започва всеки токен. Когато спре, получавате реда и колоната, откъс от този ред със знак ^ под проблемния символ и подсказка на разбираем език, например Вероятно липсва запетая между две свойства. Бутонът Към грешката премества курсора точно на това място във входните данни.

Най-честите грешки, които виждаме в поставените документи:

ВходПроблемКоректен JSON
{'name': 'Ada'}единични кавички{"name": "Ada"}
{name: "Ada"}ключ без кавички{"name": "Ada"}
[1, 2, 3,]излишна запетая[1, 2, 3]
{"a": 1 "b": 2}липсваща запетая{"a": 1, "b": 2}
{"ok": True}литерал от Python{"ok": true}
{"x": 007}водеща нула{"x": 7} или {"x": "007"}
// commentкоментарне е позволен в JSON

Бутонът Поправи вместо мен отстранява всички тези грешки с изключение на липсващата запетая и водещата нула. Поправката е умишлено предпазлива. Тя никога не гадае къде трябва да е липсващата запетая, защото запетая на грешно място променя смисъла на данните, а 007 може да означава числото 7, но и код. В тези случаи вместо поправка получавате точната позиция.

Големи числа, ред на ключовете и други неща, които обикновено се развалят

Много форматери работят, като извикват JSON.parse и след това JSON.stringify. Това двойно преобразуване незабелязано поврежда данните. ID от Twitter или Snowflake като 1234567890123456789 надхвърля границата 2^53 на числата в JavaScript и се връща като 1234567890123456800. Стойността 1.0 става 1, а 1e3 става 1000. Този форматер никога не превръща числата в числа с плаваща запетая. Той копира всеки литерал точно така, както е написан, така че резултатът е вярно преформатиране на входа, а не негово претълкуване. Същото важи и за екраниращите последователности в низовете: "\u00e9" остава "\u00e9" и не се превръща в "é".

Редът на ключовете също се запазва. Спецификацията на JSON казва, че членовете на обекта са неподредени, но конфигурационните файлове, тестовите данни и прегледите на код се четат много по-лесно, когато редът е стабилен. Ако предпочитате канонична форма, например за да сравните два отговора от API в инструмент за diff, включете Сортирай ключовете и двата документа ще подредят свойствата си по азбучен ред на всяко ниво на влагане.

Форматиране или минифициране на JSON: кога кое да използвате

Форматираният JSON е за хора. Използвайте го, когато преглеждате отговор от API, пишете package.json, tsconfig.json или документ на OpenAPI, или когато пазите тестови данни в хранилище, където всеки diff трябва да показва по една промяна на ред. Два интервала са конвенцията в света на JavaScript, четири интервала са обичайни в проектите на Python и .NET, а табулациите позволяват на всеки читател да избере собствената си ширина.

Минифицираният JSON е за машини. Празното пространство обикновено заема 20 до 40 процента от форматирания документ, така че премахването му намалява данните, изпращани към браузърите, стойностите в Redis или в колона на база данни и атрибутите data-*, вградени в HTML. Компресията gzip стопява част от тази разлика, но минифицираната версия пак се компресира до по-малък размер. Показателят за размер под резултата показва точната разлика за вашия документ.

Работа с JSON в терминала и в редакторите

За файлове, които обработвате многократно, инструментът от командния ред е по-бърз от всеки уебсайт. jq . file.json форматира, jq -c . file.json минифицира, а python -m json.tool file.json работи навсякъде, където е инсталиран Python. Visual Studio Code форматира JSON с Shift+Alt+F и го валидира спрямо схема, когато добавите свойство $schema. Тази страница е за всички останали случаи: отговор, копиран от раздела Network, ред от лог, конфигурационен фрагмент от уики или бърза проверка на компютър, на който не можете да инсталирате нищо.

Свързани инструменти на сайта: Base64 енкодерът и декодерът декодира частта с данни (payload) на JWT, която представлява JSON, кодиран в Base64url. Конверторът за Unix timestamp превръща числата createdAt от повечето отговори на API в четими дати, а UUID декодерът показва версията и времевия маркер на идентификаторите в данните ви. Още помощни инструменти ще намерите в категорията Разработчици.

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

Качва ли се моят JSON на сървър? Не. Анализът, форматирането и поправката се изпълняват изцяло във вашия браузър с JavaScript. След като страницата се зареди, можете да изключите мрежата и инструментът ще продължи да работи. Нищо не се записва и не се съхранява.
Защо валидаторът отхвърля коментари, щом моят редактор ги приема? Коментарите са премахнати от JSON умишлено от неговия автор Douglas Crockford, за да не се използва форматът за директиви към парсера. Файлове като tsconfig.json или .vscode/settings.json технически са JSONC, разширение на JSON, което редакторите поддържат. Строгите парсери в API, базите данни и повечето езици за програмиране ги отхвърлят. Бутонът за поправка премахва коментарите, така че резултатът да е валиден навсякъде.
Мога ли да форматирам JSON Lines или няколко обекта наведнъж? Един JSON документ съдържа точно една стойност. Ако поставите няколко обекта, разделени със запетаи или нови редове, валидаторът спира при първата излишна стойност. Оградете ги с квадратни скоби, за да получите масив, и след това форматирайте. Бутонът за поправка не прави това автоматично, защото не може да знае дали входът е трябвало да бъде един документ.
Какъв е максималният размер? Няма фиксирано ограничение. Документи от няколко мегабайта се форматират на лаптоп за доста по-малко от секунда. Над приблизително 400 kB оцветяването на синтаксиса се изключва, за да остане страницата отзивчива, но копирането и изтеглянето продължават да работят.
Променя ли сортирането на ключовете данните? Не. Обектите в JSON по дефиниция са неподредени, вижте статията за JSON в Уикипедия, така че парсерът чете сортирания и оригиналния документ като една и съща стойност. Масивите никога не се пренареждат, защото редът им е част от данните.
Как да екранирам JSON, за да го вградя в низ? Първо минифицирайте, след това екранирайте всяка обратна наклонена черта и всяка двойна кавичка. Много езици предлагат това директно: JSON.stringify(JSON.stringify(obj)) в JavaScript или json.dumps(json.dumps(obj)) в Python връщат JSON низ, който съдържа JSON текста.

Бих се радвал, ако споделите тези страници с приятели, ги запазите в отметки или ги свържете. Благодаря! 🙏