JSON Форматер: Улепшавање и Валидација JSON-а Онлајн Бесплатно
Моментално форматирајте минимизирани JSON са правилним увлачењем. Бесплатни онлајн JSON форматер валидира синтаксу, улепшава код и убрзава отклањање грешака. Ради у прегледачу са форматирањем у реалном времену.
JSON Форматер
Форматирајте и улепшајте свој JSON помоћу овог једноставног алата - форматирање се дешава аутоматски док куцате!
Форматирани JSON ће се појавити овде аутоматски...
Dokumentacija
Шта је форматер 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 објекта.
Процес, корак по корак:
- Прочитајте следећи токен (објекат, низ, ниску, број,
true,falseилиnull). - Проверите га према граматици JSON-а. Одбаците га ако крши неко правило, као што су кључ без наводника или зарез на крају.
- Копирајте текст токена непромењен у излаз.
- Додајте прелом реда и увуците за 2 размака за сваки ниво угнежђености унутар објекта или низа. Празан објекат или низ остаје у једном реду, као
{}или[]. - Понављајте док не прочитате цео улаз.
Увлачење је подешено на 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-а
Даглас Крокфорд је спецификовао ЈСОН почетком 2000-их, преузевши синтаксу из литерала Јаваскрипт објеката, али га учинивши употребљивим из било ког језика. РФЦ 4627 га је формализовао 2006. Брзо се проширио јер је био краћи за писање од ИксМЛ-а и директно се пресликавао на Јаваскрипт објекте, што је било важно када су веб-апликације почеле да преузимају податке у позадини уместо да поново учитавају целе странице. До 2010-их постао је подразумевани формат за РЕСТ АПИ-је и базе података као што је МонгоДБ.
Најчешће постављана питања
Шта је форматер JSON-а? Алат који додаје увлачење, преломе редова и размаке тексту у формату JSON-а како би његова структура била лака за читање, без промене података.
Да ли форматирање мења податке? Не. Форматирање мења само размаке. Овај алат копира сваку ниску и број тачно онако како су унети, па се вредности у форматираном излазу прецизно подударају са уносом, укључујући бројеве који су превелики да би се тачно сачували као JavaScript број.
Зашто добијам грешку „Неисправан JSON“? Унос крши правило JSON-а. Чести узроци су називи својстава без наводника, зарез на крају, једноструки наводници, незатворена ниска или неусклађена заграда. Овај алат не приказује тачну позицију знака на којем је проблем; провера уноса према горе наведеним правилима обично га брзо открије.
Може ли JSON да садржи коментаре? Не. Спецификација их не дозвољава. Формати као што су JSONC и JSON5 додају подршку за коментаре на синтаксу JSON-а у случајевима када је то корисно, као што су конфигурационе датотеке.
Које је стандардно увлачење JSON-а? Два размака су најчешћа конвенција у веб-развоју и то је оно што овај алат користи. Неки стилски водичи користе четири размака или табулаторе; сама спецификација JSON-а не захтева одређено увлачење.
Која је разлика између JSON.parse() и JSON.stringify()?
JSON.parse() претвара JSON ниску у JavaScript вредност. JSON.stringify() ради обрнуто: претвара JavaScript вредност у JSON ниску и прихвата аргумент за увлачење ради лепшег исписа. Овај алат интерно не користи ниједну од тих функција, што му омогућава да велике целе бројеве сачува без промене.