JSON Formatter & Validator

Acrafto Team Програмери
Ажурирано
Се чека внес. Залепете JSON погоре или пуштете .json датотека.

Залепете кој било JSON во полето погоре и овој JSON formatter и validator ќе го проверува додека пишувате. Валидниот влез се форматира со вовлекувањето што ќе го изберете или се минифицира во еден ред. За невалиден влез добивате прецизна грешка со ред и колона, означен извадок и, за вообичаените грешки, поправка со еден клик. Сѐ работи во вашиот прелистувач, па API одговорите, конфигурациските датотеки и извозите никогаш не го напуштаат вашиот компјутер.

Што прави овој JSON formatter

  • Форматирање на JSON (beautify) со 2 празни места, 4 празни места или табови. Излезот го задржува оригиналниот редослед на клучевите, освен ако не го штиклирате Подреди клучеви.
  • Минификација на JSON со отстранување на сите празни места и нови редови. Податокот за големина под резултатот покажува колку бајти сте заштеделе.
  • Валидација на JSON во живо според RFC 8259, актуелниот JSON стандард. Статусната линија станува зелена штом документот е исправен.
  • Автоматска поправка на чести грешки: вишок запирки, единечни наводници, клучеви без наводници, коментари, True, None и NaN во стилот на Python, броеви како .5 или +1.
  • Вчитување датотеки со копчето Отвори датотека или со пуштање .json датотека врз полето за влез. Резултатот потоа можете да го преземете или да го вратите во влезот за уште едно поминување.

JSON validator: зошто пораката за грешка е поважна од црвената боја

Повеќето онлајн валидатори само кажуваат дека нешто не е во ред. Прелистувачите не се многу подобри: 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. Овој formatter никогаш не ги претвора броевите во броеви со подвижна запирка. Секој литерал го копира точно онака како што е напишан, па излезот е верно преформатирање на влезот, а не негово ново толкување. Истото важи и за escape секвенците во стринговите: "\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 временски печат ги претвора броевите createdAt што ги има во повеќето API одговори во читливи датуми, а UUID декодерот ви ги покажува верзијата и временскиот печат на идентификаторите во вашите податоци. Повеќе алатки ќе најдете во категоријата алатки за програмери.

Често поставувани прашања

Дали мојот JSON се праќа на сервер? Не. Парсирањето, форматирањето и поправката работат целосно во вашиот прелистувач, во JavaScript. Откако страницата ќе се вчита, можете да ја исклучите мрежата и алатката ќе продолжи да работи. Ништо не се евидентира ниту зачувува.
Зошто валидаторот ги одбива коментарите кога мојот уредувач ги прифаќа? Коментарите намерно ги отстранил од JSON неговиот автор, Douglas Crockford, за форматот да не се користи за директиви на парсерот. Датотеките како tsconfig.json или .vscode/settings.json технички се JSONC, надмножество на JSON што го поддржуваат уредувачите. Строгите парсери во API, бази на податоци и повеќето програмски јазици ги одбиваат. Копчето за поправка ги отстранува коментарите, па резултатот е валиден насекаде.
Може ли да форматирам JSON Lines или повеќе објекти одеднаш? JSON документот содржи точно една вредност. Ако залепите повеќе објекти одделени со запирки или нови редови, валидаторот застанува кај првата вишок вредност. Ставете ги во средни загради за да добиете низа, а потоа форматирајте. Копчето за поправка не го прави тоа автоматски, бидејќи не може да знае дали влезот требало да биде еден документ.
Која е максималната големина? Нема фиксна граница. Документи од неколку мегабајти се форматираат за многу помалку од една секунда на лаптоп. Над приближно 400 kB истакнувањето на синтаксата се исклучува за страницата да остане брза, но копирањето и преземањето и понатаму работат.
Дали подредувањето на клучевите ги менува податоците? Не. Објектите во JSON по дефиниција немаат редослед, видете ја статијата за JSON на Википедија (на англиски), па парсерот ги чита подредениот и оригиналниот документ како иста вредност. Низите никогаш не се преуредуваат, бидејќи нивниот редослед е дел од податоците.
Како да вметнам JSON во стринг со escape знаци? Прво минифицирајте го, а потоа пред секоја обратна коса црта и секој двоен наводник додадете обратна коса црта. Многу јазици го нудат тоа директно: JSON.stringify(JSON.stringify(obj)) во JavaScript или json.dumps(json.dumps(obj)) во Python даваат JSON стринг што го содржи JSON текстот.

Ќе бидам благодарен ако ги споделите овие страници со пријатели, ги зачувате во обележувачи или линкувате кон нив. Благодарам! 🙏