Preskoči na vsebino

JSON Oblikovalnik: Polepšaj in Preveri JSON Spletno Brezplačno

Oblikuj stisnjeni JSON takoj s pravilnim zamikanjem. Brezplačni spletni JSON oblikovalnik preveri sintakso, polepša kodo in pospeši razhroščevanje. Deluje v brskalniku z oblikovanjem v realnem času.

JSON Oblikovalnik

Oblikujte in polepšajte svoj JSON s tem preprostim orodjem - oblikovanje se zgodi samodejno med pisanjem!

Oblikovan JSON se bo samodejno prikazal tukaj...

Kalkulator nalaganja...
📚

Dokumentacija

Kaj je oblikovalnik JSON?

Oblikovalnik JSON je orodje, ki vzame besedilo JSON (JavaScript Object Notation) in ga prepiše z zamiki ter prelomi vrstic, ne da bi spremenilo same podatke. JSON je oblika navadnega besedila za shranjevanje in pošiljanje strukturiranih podatkov, sestavljena iz parov imen in vrednosti ter seznamov. Programi običajno prihranijo prostor tako, da odstranijo vse odvečne presledke, zato nastane ena sama zgoščena vrstica, ki jo človek težko bere. Oblikovalnik, imenovan tudi olepševalnik ali program za lepši izpis, te presledke dosledno doda nazaj, tako da je struktura vidna. To orodje JSON oblikuje samodejno med tipkanjem ali lepljenjem. Gumba za oblikovanje ni; izhod se posodobi ob vsakem pritisku tipke. Gumb za ponastavitev izbriše vnos, gumb za kopiranje pa kopira oblikovani rezultat.

Pravila sintakse JSON

JSON določa specifikacija z imenom RFC 8259. Ima dve vrsti vsebnikov:

Objekti vsebujejo pare imen in vrednosti v zavitih oklepajih:

1{"name": "John", "age": 30, "city": "New York"}
2

Polja vsebujejo urejene sezname, obdane z oglatimi oklepaji:

1["apple", "banana", "cherry"]
2

Vrednost v JSON mora biti ene od šestih vrst: niz, število, logična vrednost (true ali false), null, objekt ali polje.

Večino napak povzročijo naslednja pravila:

  • Imena lastnosti morajo biti obdana z dvojnimi narekovaji. {name: "John"} ni veljaven; mora biti {"name": "John"}.
  • Nizi morajo uporabljati dvojne, ne enojnih narekovajev.
  • Za zadnjim elementom v objektu ali polju ne sme biti vejice (brez končnih vejic).
  • JSON nima sintakse za komentarje, čeprav njegov videz z zavitimi in oglatimi oklepaji izhaja iz JavaScripta.
  • JSON nima vrednosti undefined. Za manjkajočo vrednost uporabite null.

Pogosta napaka je lepljenje literalnega objekta JavaScript namesto JSON. {name: 'John', age: undefined} je veljaven JavaScript, vendar ni veljaven JSON. Različica JSON je {"name": "John", "age": null}.

Kako deluje ta oblikovalnik JSON

Številni oblikovalniki JSON besedilo obdelajo s funkcijo JSON.parse(), da ustvarijo objekt JavaScript, nato pa ga s funkcijo JSON.stringify() pretvorijo nazaj v besedilo s presledki. Ta povratni prehod ima stranski učinek: JavaScriptova števila so plavajoča števila dvojne natančnosti IEEE 754, ki ne morejo natančno predstaviti vsakega celega števila, ko presežejo 2^53 − 1 (9,007,199,254,740,991). Identifikator, kot je 9007199254740993, se lahko po tem povratnem prehodu izpiše kot 9007199254740992.

To orodje ta korak preskoči. Vnos bere znak za znakom z majhnim ročno napisanim razčlenjevalnikom in namesto pretvarjanja posameznega števila ali niza v vrednost JavaScript ta del besedila prekopira natanko tako, kot je zapisan, nato pa ga postavi na ustrezno raven zamika. Ker se števila nikoli ne pretvorijo v plavajoče vrednosti, cela števila poljubne velikosti ohranijo svoje natančne števke. Če je isti ključ v objektu zapisan dvakrat, se ohranita obe kopiji na svojem mestu, namesto da bi se skrčili na zadnjo, kot bi se zgodilo pri ustvarjanju objekta JavaScript.

Postopek po korakih:

  1. Preberite naslednji žeton (objekt, polje, niz, število, true, false ali null).
  2. Preverite ga glede na slovnico JSON. Zavrnite ga, če krši pravilo, na primer če je ključ brez narekovajev ali če vsebuje končno vejico.
  3. Besedilo žetona nespremenjeno kopirajte v izhod.
  4. Dodajte prelom vrstice in zamik za 2 presledka za vsako raven gnezdenja v objektu ali polju. Prazen objekt ali polje ostane v eni vrstici, kot {} ali [].
  5. Ponavljajte, dokler ni prebran celoten vnos.

Zamik je določen na 2 presledka; nastavitve za njegovo spreminjanje ni. Ko je vnosno polje prazno, izhodna plošča prikazuje nadomestno besedilo »Formatted JSON will appear here automatically...«. Če vnos krši pravilo JSON, orodje prikaže sporočilo »Invalid JSON: Please check your input« namesto tehničnega sporočila razčlenjevalnika z natančnim položajem znaka. Vgrajena funkcija brskalnikov JSON.parse() pa v besedilu napake navede položaj znaka.

Primer z rešitvijo

Ta pomanjšani vnos:

1{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}
2

se spremeni v:

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

Vsak ugnezdeni objekt ali polje ima en raven zamika več kot njegov nadrejeni element, zato je razmerje med address in njegovimi tremi polji na prvi pogled vidno.

Drugi primer pokaže, zakaj je pomembno kopiranje literalov. Ta vnos:

1{"id":9007199254740993}
2

se oblikuje v:

1{
2  "id": 9007199254740993
3}
4

Števke ostanejo natanko takšne, kot so bile vnesene. Oblikovalnik, ki temelji na JSON.parse(), ki mu sledi JSON.stringify(), bi to število namesto tega tiho pretvoril v 9007199254740992.

Pogoste napake v JSON

  • Ime lastnosti brez narekovajev: {name: "John"}. Popravek: {"name": "John"}.
  • Končna vejica: {"age": 30,}. Popravek: odstranite vejico pred zaklepnim zavitim oklepajem.
  • Neujemajoči se oklepaji: {"data": [1, 2}. Popravek: polje zaprite z ], preden zaprete objekt.
  • Nezaključen niz: {"name": "John}. Popravek: dodajte manjkajoči zaključni narekovaj.
  • Enojni narekovaji: {'name': 'John'}. Popravek: uporabite dvojne narekovaje.
  • undefined, NaN ali Infinity: nobena od teh vrednosti ni veljavna vrednost JSON. Uporabite null ali niz.

Pogost vir teh napak je neposredno kopiranje objekta iz konzole brskalnika ali dnevnika strežnika, ki pogosto vsebuje sintakso, značilno samo za JavaScript, ki jo je treba očistiti, preden je objekt veljaven JSON.

Kdaj uporabiti oblikovalnik JSON

Oblikovalniki JSON se najpogosteje uporabljajo za pregled odgovorov API-jev, ki se običajno pošiljajo v minificirani obliki, da se prihrani pasovna širina. Uporabljajo se tudi za ročno preverjanje konfiguracijskih datotek, kot sta package.json ali composer.json, za branje podatkov, kopiranih iz lokalne shrambe ali konzole brskalnika, ter za razumevanje oblike podatkovnega niza, prejetega iz drugega sistema.

Drugi načini oblikovanja JSON

  • Razvojna orodja brskalnika: Chrome, Edge in Firefox samodejno oblikujejo odgovore JSON v podoknu za predogled zavihka Network.
  • Urejevalniki kode: Visual Studio Code oblikuje odprto datoteko JSON z bližnjico Alt+Shift+F (na Macu Shift+Option+F). Večina urejevalnikov ima enakovredno bližnjico ali razširitev za oblikovanje.
  • Ukazna vrstica: jq (jq . file.json) in vgrajeno Pythonovo orodje python -m json.tool file.json oblikujeta JSON iz terminala.

Vgradnja oblikovanja JSON v kodo

Večina programskih jezikov vključuje knjižnico JSON z možnostjo nastavitve zamika. V JavaScriptu:

1const formatted = JSON.stringify(JSON.parse(rawJson), null, 2);
2

V Pythonu:

1import json
2formatted = json.dumps(json.loads(raw_json), indent=2)
3

Oba pristopa razčlenita besedilo v izvorno podatkovno strukturo in ga nato ponovno serializirata s presledki. To je preprosto napisati, vendar lahko spremeni števila. JavaScript vsako število shrani kot dvojno natančno število, zato se 9007199254740993 vrne kot 9007199254740992. Python cela števila ohrani natančna, ker Pythonova cela števila nimajo omejitve velikosti, vendar še vedno prepiše 1.0e2 v 100.0 in 1e999 pretvori v Infinity, kar ni veljaven JSON. Aplikacije, ki potrebujejo natančna velika cela števila, kot so identifikatorji podatkovnih baz, jih v JSON pogosto shranijo kot nize in ne kot števila.

Kratka zgodovina JSON

Douglas Crockford je JSON določil v začetku 2000-ih; njegovo sintakso je prevzel iz literalov objektov JavaScript, vendar jo je naredil uporabno v katerem koli jeziku. RFC 4627 ga je formaliziral leta 2006. Hitro se je razširil, ker ga je bilo krajše zapisati kot XML in se je neposredno preslikal v objekte JavaScript, kar je postalo pomembno, ko so spletne aplikacije začele pridobivati podatke v ozadju, namesto da bi znova nalagale celotne strani. Do 2010-ih je postal privzeta oblika za API-je REST in podatkovne zbirke, kot je MongoDB.

Pogosta vprašanja

Kaj je oblikovalnik JSON? Orodje, ki besedilu JSON doda zamike, prelome vrstic in presledke, tako da je njegovo strukturo enostavno brati, ne da bi spremenilo podatke.

Ali oblikovanje spremeni podatke? Ne. Oblikovanje spremeni samo presledke. To orodje vsak niz in število kopira natanko tako, kot sta bila vnesena, zato se vrednosti v oblikovanem izhodu natančno ujemajo z vnosom, tudi števila, ki jih ni mogoče natančno shraniti kot število JavaScript.

Zakaj se prikaže napaka »Invalid JSON«? Vnos krši pravilo JSON. Pogosti vzroki so imena lastnosti brez narekovajev, končna vejica, enojni narekovaji, nezaključen niz ali neujemajoči se oklepaj. To orodje ne prikaže natančnega položaja težave; če vnos primerjate z zgoraj navedenimi pravili, jo običajno hitro najdete.

Ali lahko JSON vsebuje komentarje? Ne. Specifikacija jih ne dovoljuje. Oblike, kot sta JSONC in JSON5, dodajo podporo za komentarje na vrhu sintakse JSON za primere, kjer je to uporabno, na primer pri konfiguracijskih datotekah.

Kakšen je standardni zamik JSON? Dva presledka sta najpogostejša konvencija pri spletnem razvoju in to uporablja tudi to orodje. Nekateri slogovni vodniki namesto tega uporabljajo štiri presledke ali tabulatorje; sama specifikacija JSON ne zahteva določenega zamika.

Kakšna je razlika med JSON.parse() in JSON.stringify()? JSON.parse() niz JSON pretvori v vrednost JavaScript. JSON.stringify() izvede obratno: vrednost JavaScript pretvori v niz JSON in sprejme argument za zamik pri oblikovanju v lepi obliki. To orodje nobene od teh funkcij ne uporablja interno, zato lahko velika cela števila ohrani natančno.

Viri

  1. RFC 8259 — Format za izmenjavo podatkov JavaScript Object Notation (JSON)
  2. MDN Web Docs: JSON
  3. json.org