JSON formatter i validator

Acrafto Team Програмери
Ажурирано
Чека се унос. Налепите JSON изнад или превуците .json датотеку.

Nalepite bilo koji JSON u polje iznad i ovaj JSON formatter i validator ga proverava dok kucate. Važeći unos se pregledno formatira sa uvlačenjem koje izaberete ili se minifikuje u jedan red. Za neispravan unos dobijate tačnu grešku sa redom i kolonom, istaknut isečak i, kod uobičajenih grešaka, popravku jednim klikom. Sve radi u vašem pregledaču, pa API odgovori, konfiguracione datoteke i izvozi nikada ne napuštaju vaš računar.

Šta radi ovaj JSON formatter

  • Formatiranje JSON-a sa 2 razmaka, 4 razmaka ili tabovima. Rezultat zadržava originalni redosled ključeva, osim ako ne označite Sortiraj ključeve.
  • Minifikacija JSON-a uklanjanjem svih razmaka i preloma redova. Podatak o veličini ispod rezultata pokazuje koliko ste bajtova uštedeli.
  • Validacija JSON-a uživo prema RFC 8259, aktuelnom JSON standardu. Statusna linija postaje zelena čim je dokument ispravan.
  • Automatska popravka čestih grešaka: zarezi na kraju, jednostruki navodnici, ključevi bez navodnika, komentari, True, None i NaN u stilu Python-a, brojevi poput .5 ili +1.
  • Učitavanje datoteka dugmetom Otvori datoteku ili prevlačenjem .json datoteke u polje za unos. Rezultat zatim možete preuzeti ili ga vratiti u unos za još jedan prolaz.

Zašto je poruka o grešci važnija od crvene boje

Većina online validatora kaže samo da nešto nije u redu. Ni pregledači nisu mnogo bolji: JSON.parse u Chrome-u prijavljuje Unexpected token } in JSON at position 148, Firefox kaže expected property name or '}', a nijedan vam ne kaže koji red treba da pogledate. Ovaj alat ima sopstveni parser koji pamti gde počinje svaki token. Kada se zaustavi, dobijate red i kolonu, isečak tog reda sa oznakom ^ ispod problematičnog znaka i objašnjenje običnim jezikom, na primer Verovatno nedostaje zarez između dva svojstva. Dugme Idi na grešku pomera kursor tačno na to mesto u polju za unos.

Najčešće greške koje viđamo u nalepljenim dokumentima:

UnosProblemIspravan JSON
{'name': 'Ada'}jednostruki navodnici{"name": "Ada"}
{name: "Ada"}ključ bez navodnika{"name": "Ada"}
[1, 2, 3,]zarez na kraju[1, 2, 3]
{"a": 1 "b": 2}nedostaje zarez{"a": 1, "b": 2}
{"ok": True}literal iz Python-a{"ok": true}
{"x": 007}nula na početku{"x": 7} ili {"x": "007"}
// commentkomentarnije dozvoljen u JSON-u

Dugme Popravi umesto mene ispravlja sve ove greške osim nedostajućeg zareza i nule na početku. Popravka je namerno oprezna: nikada ne pogađa gde nedostajući zarez pripada, jer zarez na pogrešnom mestu menja značenje podataka, a 007 može biti broj 7 ili šifra. U tim slučajevima umesto popravke dobijate tačnu poziciju greške.

Veliki brojevi, redosled ključeva i druge stvari koje se obično pokvare

Mnogi formateri rade tako što pozovu JSON.parse, a zatim JSON.stringify. Taj povratni put tiho oštećuje podatke. Twitter ili Snowflake ID poput 1234567890123456789 premašuje granicu od 2^53 za brojeve u JavaScript-u i vraća se kao 1234567890123456800. Vrednost 1.0 postaje 1, a 1e3 postaje 1000. Ovaj formatter nikada ne pretvara brojeve u brojeve sa pokretnim zarezom. Svaki literal kopira tačno onako kako je napisan, pa je rezultat verno preformatiranje unosa, a ne njegovo novo tumačenje. Isto važi i za escape sekvence unutar stringova: "\u00e9" ostaje "\u00e9" i ne pretvara se u "é".

I redosled ključeva ostaje sačuvan. JSON specifikacija kaže da članovi objekta nemaju redosled, ali konfiguracione datoteke, testni podaci i pregledi koda se mnogo lakše čitaju kada je redosled stabilan. Ako vam treba kanonski oblik, na primer da uporedite dva API odgovora u alatu za poređenje (diff), uključite Sortiraj ključeve i oba dokumenta će navesti svojstva abecednim redom na svakom nivou ugnežđavanja.

Formatiranje JSON-a ili minifikacija: kada koristiti šta

Pregledno formatiran JSON je za ljude. Koristite ga kada pregledate API odgovor, pišete package.json, tsconfig.json ili OpenAPI dokument, ili kada čuvate testne podatke u repozitorijumu u kome razlike treba da prikazuju jednu promenu po redu. Dva razmaka su konvencija u svetu JavaScript-a, četiri razmaka su uobičajena u Python i .NET projektima, a tabovi omogućavaju svakom čitaocu da sam izabere širinu.

Minifikovani JSON je za mašine. Razmaci obično čine 20 do 40 procenata formatiranog dokumenta, pa njihovo uklanjanje smanjuje podatke koji se šalju pregledačima, vrednosti sačuvane u Redis-u ili u koloni baze podataka i data-* atribute ugrađene u HTML. Gzip delimično smanjuje tu razliku, ali se minifikovana verzija i dalje kompresuje u manji rezultat. Podatak o veličini ispod rezultata pokazuje tačnu razliku za vaš dokument.

Rad sa JSON-om u terminalu i editorima

Za datoteke koje obrađujete više puta, alat iz komandne linije je brži od bilo kog sajta. jq . file.json pregledno formatira, jq -c . file.json minifikuje, a python -m json.tool file.json radi svuda gde je instaliran Python. Visual Studio Code formatira JSON prečicom Shift+Alt+F i proverava ga prema šemi kada dodate svojstvo $schema. Ova stranica je za ostale slučajeve: odgovor kopiran sa kartice Network, red iz loga, konfiguracioni isečak sa wikija ili brzu proveru na računaru na kome ne možete ništa da instalirate.

Povezani alati na ovom sajtu: Base64 enkoder i dekoder dekodira payload deo JWT-a, koji je JSON kodiran u Base64url. Unix timestamp konverter pretvara brojeve createdAt iz većine API odgovora u čitljive datume, a UUID dekoder otkriva verziju i vremensku oznaku identifikatora u vašim podacima. Još korisnih alata naći ćete u kategoriji alati za programere.

Često postavljana pitanja

Da li se moj JSON šalje na server? Ne. Parsiranje, formatiranje i popravka se u potpunosti izvršavaju u vašem pregledaču, u JavaScript-u. Kada se stranica učita, možete isključiti mrežu i alat nastavlja da radi. Ništa se ne beleži niti čuva.
Zašto validator odbija komentare kada ih moj editor prihvata? Komentare je iz JSON-a namerno uklonio njegov autor, Douglas Crockford, da se format ne bi koristio za direktive parseru. Datoteke kao što su tsconfig.json ili .vscode/settings.json su tehnički JSONC, nadskup JSON-a koji editori podržavaju. Strogi parseri u API-jima, bazama podataka i većini programskih jezika ih odbijaju. Dugme za popravku uklanja komentare, pa je rezultat važeći svuda.
Mogu li da formatiram JSON Lines ili više objekata odjednom? JSON dokument sadrži tačno jednu vrednost. Ako nalepite više objekata razdvojenih zarezima ili prelomima redova, validator se zaustavlja na prvoj suvišnoj vrednosti. Stavite ih u uglaste zagrade da dobijete niz, a zatim formatirajte. Dugme za popravku to ne radi automatski, jer ne može da zna da li je unos trebalo da bude jedan dokument.
Koja je maksimalna veličina JSON-a? Fiksna granica ne postoji. Dokumenti od nekoliko megabajta se na laptopu formatiraju za znatno manje od sekunde. Isticanje sintakse se isključuje iznad otprilike 400 kB da bi stranica ostala brza, ali kopiranje i preuzimanje i dalje rade.
Da li sortiranje ključeva menja podatke? Ne. Objekti u JSON-u po definiciji nemaju redosled (pogledajte članak o JSON-u na Vikipediji), pa parser sortirani i originalni dokument čita kao istu vrednost. Nizovi se nikada ne preuređuju, jer je njihov redosled deo podataka.
Kako escape-ovati JSON za ugradnju u string? Prvo ga minifikujte, a zatim escape-ujte svaku obrnutu kosu crtu i svaki dvostruki navodnik. Mnogi jezici to nude direktno: JSON.stringify(JSON.stringify(obj)) u JavaScript-u ili json.dumps(json.dumps(obj)) u Python-u daju JSON string koji sadrži JSON tekst.

Ценио бих ако бисте поделили ове странице са пријатељима, сачували их у обележиваче или линковали на њих. Хвала! 🙏