JSON Formatter: Uljepšaj i Validiraj JSON Online Besplatno
Formatiraje sažetog JSON-a trenutno s pravilnim uvlačenjem. Besplatni online JSON formatter provjerava sintaksu, uljepšava kod i čini ispravljanje grešaka bržim. Radi u pregledniku uz formatiranje u stvarnom vremenu.
JSON Formatter
Formatirajte i uljepšajte svoj JSON pomoću ovog jednostavnog alata - formatiranje se odvija automatski dok tipkate!
Formatirani JSON će se automatski pojaviti ovdje...
Dokumentacija
Što je alat za formatiranje JSON-a?
JSON alat za formatiranje uzima tekst u formatu JSON (JavaScript Object Notation) i ponovno ga ispisuje s uvlačenjem i prijelomima redaka, bez promjene samih podataka. JSON je tekstualni format za pohranu i slanje strukturiranih podataka, izgrađen od parova naziva i vrijednosti te popisa. Programi obično štede prostor uklanjanjem svih suvišnih razmaka, čime nastaje jedan zbijeni redak koji je osobi teško čitati. Alat za formatiranje, koji se naziva i uljepšivač ili alat za čitljiv ispis, dosljedno ponovno dodaje te razmake kako bi struktura bila vidljiva. Ovaj alat automatski oblikuje JSON dok se tekst upisuje ili lijepi. Ne postoji gumb za oblikovanje; izlaz se ažurira pri svakom pritisku tipke. Gumb za resetiranje briše unos, a gumb za kopiranje kopira oblikovani rezultat.
Pravila sintakse JSON-a
JSON je definiran specifikacijom pod nazivom RFC 8259. Ima dvije vrste kontejnera:
Objekti sadrže parove naziva i vrijednosti unutar vitičastih zagrada:
1{"name": "John", "age": 30, "city": "New York"}
2Nizovi sadrže uređene popise unutar uglatih zagrada:
1["apple", "banana", "cherry"]
2Vrijednost u JSON-u mora biti jedna od šest vrsta: niz znakova, broj, Booleova vrijednost (true ili false), null, objekt ili polje.
Nekoliko pravila uzrokuje većinu pogrešaka:
- Nazivi svojstava moraju biti omeđeni dvostrukim navodnicima.
{name: "John"}nije valjan; mora biti{"name": "John"}. - Nizovi znakova moraju upotrebljavati dvostruke, a ne jednostruke navodnike.
- Nakon posljednje stavke u objektu ili polju ne smije slijediti zarez (nema završnih zareza).
- JSON nema sintaksu za komentare, iako njegov izgled s vitičastim i uglatim zagradama potječe iz JavaScripta.
- JSON nema vrijednost
undefined. Za vrijednost koja nedostaje upotrijebitenull.
Česta je pogreška lijepljenje literala JavaScriptova objekta umjesto JSON-a. {name: 'John', age: undefined} valjan je JavaScript, ali nije valjan JSON. JSON inačica glasi {"name": "John", "age": null}.
Kako radi ovaj alat za formatiranje JSON-a
Mnogi JSON formatteri prosljeđuju tekst funkciji JSON.parse() kako bi izgradili JavaScriptov objekt, a zatim ga funkciji JSON.stringify() kako bi ga ponovno pretvorili u tekst s razmacima. Taj povratni prolaz ima sporedni učinak: JavaScriptovi brojevi su brojevi s pomičnim zarezom dvostruke preciznosti prema standardu IEEE 754, koji ne može točno prikazati svaki cijeli broj nakon što prijeđu 2^53 − 1 (9,007,199,254,740,991). Identifikator kao što je 9007199254740993 nakon tog prolaza može izaći kao 9007199254740992.
Ovaj alat izbjegava taj korak. Ulaz obrađuje znak po znak pomoću malog ručno napisanog raščlanjivača i, umjesto pretvaranja svakog broja ili niza znakova u JavaScriptovu vrijednost, kopira taj dio teksta točno onako kako je napisan, a zatim ga postavlja na odgovarajuću razinu uvlačenja. Budući da se brojevi nikad ne pretvaraju u broj s pomičnim zarezom, cijeli brojevi bilo koje veličine zadržavaju točne znamenke. Ako je isti ključ u objektu zapisan dvaput, obje se kopije zadržavaju na svojim mjestima umjesto da se sačuva samo posljednja, što bi se dogodilo pri izgradnji JavaScriptova objekta.
Postupak, korak po korak:
- Pročitajte sljedeći token (objekt, polje, niz znakova, broj,
true,falseilinull). - Provjerite ga prema gramatici JSON-a. Odbacite ga ako krši neko pravilo, primjerice ako je ključ bez navodnika ili postoji završni zarez.
- Kopirajte tekst tokena nepromijenjen u izlaz.
- Dodajte prijelom retka i uvucite za 2 razmaka za svaku razinu ugniježđenosti unutar objekta ili polja. Objekt ili polje bez elemenata ostaje u jednom retku, kao
{}ili[]. - Ponavljajte dok se ne pročita cijeli ulaz.
Uvlačenje je fiksno postavljeno na 2 razmaka; ne postoji postavka za njegovu promjenu. Dok je ulazni okvir prazan, izlazna ploča prikazuje tekst rezerviranog mjesta "Formatted JSON will appear here automatically...". Ako ulaz krši neko pravilo JSON-a, alat prikazuje poruku "Invalid JSON: Please check your input", a ne tehničku poruku parsera koja navodi točan položaj znaka. Ugrađena funkcija preglednika JSON.parse(), nasuprot tome, u tekstu pogreške navodi položaj znaka.
Primjer s rješenjem
Ovaj sažeti ulaz:
1{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}
2postaje:
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}
15Svaki ugniježđeni objekt ili polje uvučeno je jednu razinu više od nadređenog, pa je odnos između address i njegova tri polja odmah vidljiv.
Drugi primjer pokazuje zašto je važno kopirati literale. Ovaj ulaz:
1{"id":9007199254740993}
2oblikuje se u:
1{
2 "id": 9007199254740993
3}
4Znamenke ostaju točno onakve kakve su upisane. Formatter izgrađen na funkciji JSON.parse(), nakon koje slijedi JSON.stringify(), umjesto toga bi nečujno pretvorio taj broj u 9007199254740992.
Uobičajene pogreške u JSON-u
- Naziv svojstva bez navodnika:
{name: "John"}. Ispravak:{"name": "John"}. - Završni zarez:
{"age": 30,}. Ispravak: uklonite zarez prije zatvarajuće vitičaste zagrade. - Neusklađene zagrade:
{"data": [1, 2}. Ispravak: zatvorite polje znakom]prije zatvaranja objekta. - Nezatvoren niz znakova:
{"name": "John}. Ispravak: dodajte nedostajući završni navodnik. - Jednostruki navodnici:
{'name': 'John'}. Ispravak: upotrijebite dvostruke navodnike. undefined,NaNiliInfinity: nijedna od tih vrijednosti nije valjana JSON vrijednost. Upotrijebitenullili niz znakova.
Čest izvor tih pogrešaka jest izravno kopiranje objekta iz konzole preglednika ili dnevnika poslužitelja, koji često sadržavaju sintaksu specifičnu za JavaScript i koju treba očistiti prije nego što objekt bude valjan JSON.
Kada upotrebljavati alat za formatiranje JSON-a
JSON formatteri najčešće se upotrebljavaju za pregled odgovora API-ja, koji se obično šalju u sažetom obliku radi uštede propusnosti. Također se ručno upotrebljavaju za provjeru konfiguracijskih datoteka kao što su package.json ili composer.json, za čitanje podataka kopiranih iz lokalne pohrane ili konzole preglednika te za razumijevanje strukture skupa podataka primljenog iz drugog sustava.
Drugi načini oblikovanja JSON-a
- Alati za razvojne programere u pregledniku: Chrome, Edge i Firefox automatski oblikuju JSON odgovore u oknu za pregled na kartici Network.
- Uređivači koda: Visual Studio Code oblikuje otvorenu JSON datoteku prečacem Alt+Shift+F (Shift+Option+F na Macu). Većina uređivača ima odgovarajući prečac ili proširenje za oblikovanje.
- Naredbeni redak:
jq(jq . file.json) i Pythonov ugrađeni alatpython -m json.tool file.jsonoblikuju JSON iz terminala.
Ugradnja oblikovanja JSON-a u kod
Većina programskih jezika sadržava biblioteku za JSON s mogućnošću uvlačenja. U JavaScriptu:
1const formatted = JSON.stringify(JSON.parse(rawJson), null, 2);
2U Pythonu:
1import json
2formatted = json.dumps(json.loads(raw_json), indent=2)
3Oba pristupa analiziraju tekst u izvornu strukturu podataka, a zatim ga ponovno serijaliziraju s razmacima. To je jednostavno napisati, ali može promijeniti brojeve. JavaScript svaki broj pohranjuje kao broj dvostruke preciznosti, pa se 9007199254740993 vraća kao 9007199254740992. Python čuva cijele brojeve točnima jer Pythonovi cijeli brojevi nemaju ograničenje veličine, ali i dalje prepisuje 1.0e2 kao 100.0 i pretvara 1e999 u Infinity, što nije valjan JSON. Aplikacije kojima su potrebni točni veliki cijeli brojevi, primjerice identifikatori iz baza podataka, često ih u JSON-u pohranjuju kao tekstualne vrijednosti, a ne kao brojeve.
Kratka povijest JSON-a
Douglas Crockford definirao je JSON početkom 2000-ih, preuzevši sintaksu iz JavaScriptovih literala objekata, ali ga učinivši uporabljivim iz bilo kojeg jezika. RFC 4627 formalizirao ga je 2006. Brzo se proširio jer se pisao kraće od XML-a i izravno preslikavao u JavaScriptove objekte, što je bilo važno kada su web-aplikacije počele dohvaćati podatke u pozadini umjesto ponovnog učitavanja cijelih stranica. Do 2010-ih postao je zadani format za REST API-je i baze podataka kao što je MongoDB.
Često postavljana pitanja
Što je JSON formatter? Alat koji tekstu u formatu JSON dodaje uvlačenje, prijelome redaka i razmake kako bi se njegova struktura lako čitala, bez promjene podataka.
Mijenja li oblikovanje podatke? Ne. Oblikovanje mijenja samo razmake. Ovaj alat kopira svaki niz znakova i broj točno onako kako su upisani, pa se vrijednosti u oblikovanom izlazu precizno podudaraju s unosom, uključujući brojeve koji su preveliki da bi se točno pohranili kao JavaScriptov broj.
Zašto dobivam pogrešku "Invalid JSON"? Ulaz krši neko pravilo JSON-a. Uobičajeni su uzroci nazivi svojstava bez navodnika, završni zarez, jednostruki navodnici, nezatvoren niz znakova ili neusklađena zagrada. Ovaj alat ne prikazuje točan položaj problematičnog znaka; provjerom unosa prema gore navedenim pravilima pogreška se obično brzo pronađe.
Može li JSON sadržavati komentare? Ne. Specifikacija ih ne dopušta. Formati kao što su JSONC i JSON5 dodaju podršku za komentare povrh sintakse JSON-a u slučajevima u kojima je to korisno, primjerice u konfiguracijskim datotekama.
Koje je standardno uvlačenje JSON-a? Dva su razmaka najčešća konvencija u web-razvoju i njih upotrebljava ovaj alat. Neki stilski vodiči umjesto toga upotrebljavaju četiri razmaka ili tabulatore; sama specifikacija JSON-a ne zahtijeva određeno uvlačenje.
Koja je razlika između JSON.parse() i JSON.stringify()?
JSON.parse() pretvara JSON niz znakova u JavaScriptovu vrijednost. JSON.stringify() radi obrnuto: JavaScriptovu vrijednost pretvara u JSON niz znakova i prihvaća argument za uvlačenje pri čitljivom ispisu. Ovaj alat interno ne upotrebljava nijednu od tih funkcija, zbog čega može točno sačuvati velike cijele brojeve.