JSON podaci (.json)
RFC StandardJavaScript Object Notation (JSON) je lagan, čitljiv tekstualni format za razmenu podataka koji podržavaju mnogi programski jezici i koji se često koristi u veb API-jima.
Konvertujte JSON u HTML
Besplatan konvertor JSON u HTML u pregledaču. Konvertujte datoteke odmah na svom uređaju.
Kompresujte JSON na mreži
Privatno - datoteke nikada ne napuštaju vaš uređaj
Pregled i metapodaci
Operativni sistemi i analizatori datoteka identifikuju JSON datoteke proverom početnog binarnog niza bajtova:
Potpis zaglavlja na nivou bajtova (magični bajtovi)
Operativni sistemi i analizatori datoteka identifikuju JSON datoteke proverom početnog binarnog niza bajtova:
HEKSADECIMALNI POTPIS (OFFSET 0):
7B or 5BASCII REPREZENTACIJA: { or [
Standardizacija: RFC 8259 / ECMA-404 / ISO/IEC 21778
Tehničke specifikacije
| Arhitektura kontejnera | Lagan, tekstualni format za razmenu podataka nezavisan od jezika |
| Kompresija | JSON tekst mogu da komprimuju Gzip, Brotli i Zstandard; veličina rezultata zavisi od podataka i podešavanja. |
| Bajtni redosled (Endianness) | Unicode kodiran u UTF-8 (preporučuje se da nema Byte Order Mark / BOM oznake) |
| Prostori boja | Nije primenljivo |
| Kanali i struktura | Šest osnovnih tipova podataka: objekat, niz, niska, broj, Bulova vrednost, null |
| Maksimalne dimenzije | Neograničeno; ograničeno samo memorijom parsera i maksimalnom dužinom niske |
| Transparentnost | Nije primenljivo |
| Strimovanje i progresivno učitavanje | NDJSON (Newline Delimited JSON) / JSON Lines omogućava progresivnu obradu strimova |
Tehnička matrica poređenja: JSON u odnosu na konkurente
| Tehnički atribut | JSON (Trenutno) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Složenost sintakse | Minimalna (6 tipova, stroga sintaksa) | Visoka (bazirana na uvlačenju, složena specifikacija) | Visoka (opširni zatvarajući tagovi, imenski prostori) | Binarni format definisan šemom |
| Performanse parsiranja | Izuzetno brze u svim modernim jezicima | Spore (složeno parsiranje zasnovano na uvlačenju) | Umerene do spore (zahtevno formiranje DOM stabla) | Ultrabrze (binarna deserializacija bez kopiranja) |
| Podrška za komentare | Ne (namerno izostavljeni radi sprečavanja širenja metapodataka) | Da (# komentara) | Da (<!-- komentara -->) | Da u .proto datotekama |
| Veličina mrežnog sadržaja | Kompaktan tekst; rezultati kompresije zavise od podataka i podešavanja. | Kompaktan tekst | Opširan tekst (teško ponavljanje tagova) | Ultrakompaktan binarni format |
Uobičajeni režimi oštećenja i vodič za heksadecimalni oporavak
Sintaksna greška: neočekivani znak , na poziciji X u JSON-u.
Osnovni uzrok: Završni zarez nakon poslednje stavke u nizu ili objektu, što je strogo zabranjeno standardom JSON RFC 8259.
Oporavak: Uklonite završne zareze iz ključeva objekata i elemenata niza pre prosleđivanja funkciji JSON.parse().
Sintaksna greška: neočekivani znak ' u JSON-u.
Osnovni uzrok: Niske ili ključevi stavljeni pod jednostruke navodnike ('') umesto pod dvostruke navodnike ("").
Oporavak: Zamenite sve niske i ključeve pod jednostrukim navodnicima standardnim niskama pod dvostrukim navodnicima.
Bezbednosna analiza i vektori napada parsera
JSON sadrži samo tekst i bezbedan je od direktnog izvršavanja koda, ali parsiranje JSON-a sa neproverenih izvora može dovesti do zagađenja prototipa (Prototype Pollution), ReDoS napada ili iscrpljivanja memorije.
Poznati vektori napada
- Zagađenje prototipa (Prototype Pollution): Ključevi nazvani '__proto__' ili 'constructor' menjaju Object.prototype u JavaScript aplikacijama.
- Uskraćivanje usluge usled prelivanja steka (Stack overflow DoS) preko duboko ugnežđenih JSON struktura (npr. 10.000 otvorenih zagrada).
- Gubitak numeričke preciznosti: JavaScript brojevi veći od 2^53 - 1 (9.007.199.254.740.991) tiho gube preciznost.
Najbolje prakse za zaštitu: Nikada nemojte evaluirati JSON pomoću eval(). Koristite JSON.parse() i uklonite svojstva '__proto__' u rekurzivnim funkcijama za spajanje objekata.
Istorijat i prekretnice
Ključne prednosti
- Čitljiv ljudima, samoopisujući i sažet tekstualni format.
- Izvorna podrška za parsiranje ugrađena u JavaScript mašine (JSON.parse) i svaki veći programski jezik.
- Stroga specifikacija sprečava proizvoljno izvršavanje koda.
Tehnička ograničenja i nedostaci
- Nema podršku za komentare, završne zareze ili kružne reference objekata.
- Nema izvorne binarne tipove (binarni podaci moraju biti kodirani u base64, što uvećava veličinu za 33%).
- Neefikasna serijalizacija u poređenju sa binarnim formatima kao što su Protocol Buffers ili MessagePack.
Zanimljivosti
- Douglas Crockford je dodao klauzulu o softverskoj licenci „The Software shall be used for Good, not Evil“ u originalne JSMin JSON alate.
- JSON je strogi podskup JavaScript sintakse, ali sve do ES2019, sirovi neescapovani U+2028 i U+2029 karakteri bili su validni u JSON-u, ali nevalidni u JavaScript niskama.
- Douglas Crockford je otkrio da rani veb pretraživači mogu direktno da procene JSON u objekte koristeći ugrađenu JavaScript funkciju eval() pre nego što su namenski JSON.parse() API-ji standardizovani u ECMAScript 5.
Često postavljana tehnička pitanja
Zašto JSON ne dozvoljava komentare?
JSON gramatika ne dozvoljava komentare. Implementacije mogu različito obrađivati proširenja i podatke specifične za aplikaciju, pa sam format ne garantuje interoperabilnost.
Kako da sačuvate 64-bitne cele brojeve u JSON-u bez gubitka preciznosti?
Izvorni tip Number u JavaScript-u je IEEE 754 broj sa pokretnim zarezom dvostruke preciznosti, koji precizno podržava samo cele brojeve do 2^53 - 1. 64-bitni celi brojevi (kao što su identifikatori baze podataka ili vremenske oznake) moraju se serijalizovati kao niske (npr. '1234567890123456789') u JSON-u.
Koja je razlika između JSON-a i NDJSON / JSON Lines formata?
Standardni JSON obuhvata ceo sadržaj u jedinstveni korenski objekat ili niz, što zahteva od parsera da učitaju ceo tekst pre obrade. NDJSON (Newline Delimited JSON) razdvaja pojedinačne validne JSON zapise znakovima za novi red (\n), omogućavajući efikasno strimovanje masivnih skupova podataka veličine nekoliko gigabajta red po red.
Povezani parovi konverzije za JSON
Konvertovanje JSON podataka u HTML izvorni kod transformiše sirove strukturisane parove ključ-vrednost u veb-dokumente čitljive ljudima, spremne za prikaz u pregledaču.
Konvertovanje HTML izvornog koda u JSON podatke transformiše veb-dokumente čitljive ljudima u strukturisane parove ključ-vrednost za programsku obradu i unos preko API-ja.
Konverzija tekstualne skripte SQL Dump u JSON izvoz podataka pretvara krute tabele relacionih baza podataka u fleksibilne, ugnežđene objekte za savremene veb-aplikacije.
Transformacija nestrukturisanih JSON tekstualnih datoteka u strukturisane relacione baze podataka SQLite omogućava brzo indeksiranje i pretraživanje velikih skupova podataka.
Konvertovanje Adobe Swatch Exchange datoteka u Color JSON strukture pretvara binarne palete dizajna u čitljive tekstualne objekte za moderne veb aplikacije.
Konvertovanje Color JSON tekstualnih podataka u Adobe ASE binarne uzorke premošćuje dizajnerske tokene zasnovane na vebu i profesionalne desktop aplikacije za prelom.
Pretvaranje tekstualnih datoteka GIMP palete u Color JSON strukture omogućava veb aplikacijama da čitaju uzorke boja direktno bez složenih skripti za parsiranje.
Pretvaranje strukturiranih Color JSON datoteka u CSS promenljive transformiše sirove objekte podataka u izvorna svojstva stila za veb lokacije.