JSON-data (.json)
RFC StandardiJavaScript Object Notation (JSON) on kevyt, ihmisen luettavissa oleva tekstimuoto tiedonsiirtoon. Monet ohjelmointikielet tukevat sitä, ja sitä käytetään yleisesti verkon ohjelmointirajapinnoissa.
Muunna tiedostot muodosta JSON muotoon HTML
Ilmainen selaimessa toimiva muunnin, jolla voit muuntaa tiedostoja muodosta JSON muotoon HTML. Muunna tiedostot hetkessä laitteellasi.
Pakkaa JSON verkossa
Yksityisesti - tiedostot eivät koskaan poistu laitteeltasi
Tarkastele tiedostoa ja sen metatietoja
Käyttöjärjestelmät ja tiedostoanalyysaattorit tunnistavat JSON-tiedostot tarkistamalla tiedoston alun binäärisarjan:
Otsaketunniste tavutasolla (tunnistetavut)
Käyttöjärjestelmät ja tiedostoanalyysaattorit tunnistavat JSON-tiedostot tarkistamalla tiedoston alun binäärisarjan:
HEKSADEKSIMAALINEN TUNNISTE (SIJAINTI 0):
7B or 5BASCII-ESITYSTAPA: { or [
Standardointi: RFC 8259 / ECMA-404 / ISO/IEC 21778
Tekniset tiedot
| Säiliöarkkitehtuuri | Kevyt, tekstipohjainen, kielestä riippumaton tiedonsiirtomuoto |
| Pakkaus | Gzip-, Brotli- ja Zstandard-pakkauksella voidaan pakata JSON-tekstiä; tuloksen koko riippuu datasta ja asetuksista. |
| Tavujärjestys (Endianness) | UTF-8-koodattu Unicode (tavujärjestysmerkkiä / BOM-merkkiä ei suositella) |
| Väriavaruudet | Ei sovellettavissa |
| Kanavat ja rakenne | Kuusi perustietotyyppiä: olio, taulukko, merkkijono, luku, totuusarvo, null |
| Suurimmat mitat | Rajoittamaton; rajoittuu vain jäsentimen muistiin ja merkkijonon enimmäispituuteen |
| Läpinäkyvyys | Ei sovellettavissa |
| Suoratoisto ja progressiivinen lataus | NDJSON (Newline Delimited JSON) / JSON Lines mahdollistaa portaittaisen virtaprosessoinnin |
Tekninen vertailumatriisi: JSON vs. kilpailijat
| Tekninen attribuutti | JSON (Nykyinen) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Syntaksin monimutkaisuus | Minimaalinen (6 tyyppiä, tiukka syntaksi) | Korkea (sisennyksiin perustuva, monimutkainen spesifikaatio) | Korkea (runsassanaiset sulkutunnisteet, nimiavaruudet) | Kaavamääritelty binäärinen siirtomuoto |
| Jäsentämisen suorituskyky | Erittäin nopea kaikissa nykyaikaisissa kielissä | Hidas (monimutkainen sisennysten jäsentäminen) | Kohtalainen tai hidas (raskas DOM-rakentaminen) | Erittäin nopea binäärinen sarjallistuksen purku ilman kopiointia. |
| Kommenttien tuki | Ei (jätetty tarkoituksella pois metatiedon paisumisen ehkäisemiseksi) | Kyllä (#-kommentit) | Kyllä (<!-- kommentit -->) | Kyllä .proto-tiedostoissa |
| Verkkokuorman koko | Kompakti teksti; pakkaustulos riippuu datasta ja asetuksista. | Kompakti teksti | Runsassanainen teksti (raskas tunnisteiden toisto) | Erittäin kompakti binääri |
Yleiset vioittumistavat ja heksadesimaalinen palautusopas
SyntaxError: Odottamaton token , JSONissa kohdassa X.
Perussyy: Ylimääräinen pilkku taulukon tai olion viimeisen alkion jälkeen, mikä on tiukasti kiellettyä RFC 8259 -standardin mukaisessa JSONissa.
Korjaus: Poista ylimääräiset pilkut olion avaimista ja taulukon alkioista ennen JSON.parse()-kutsun suorittamista.
SyntaxError: Odottamaton token ' JSONissa.
Perussyy: Merkkijonot tai avaimet on ympäröity heittomerkeillä ('') kaksoismerkkeiden ("") sijaan.
Korjaus: Korvaa kaikki heittomerkeillä rajatut merkkijonot ja avaimet standardinmukaisilla kaksoismerkkeillä rajatuilla merkkijonoilla.
Tietoturva-analyysi ja tiedostojäsentimien hyökkäysvektorit
JSON on pelkkää tekstiä ja turvassa suoralta koodin suorittamiselta, mutta epäluotettavan JSON-tiedoston jäsentäminen voi johtaa prototyyppien saastumiseen (Prototype Pollution), ReDoS-hyökkäyksiin tai muistin loppumiseen.
Tunnetut hyökkäysvektorit
- Prototyypin saastuminen: Avaimet nimeltä '__proto__' tai 'constructor', jotka muokkaavat Object.prototype-määritystä JavaScript-sovelluksissa.
- Pinon ylivuodosta johtuva palvelunestohyökkäys syvästi sisäkkäisten JSON-rakenteiden kautta (esim. 10 000 avaavaa hakasulkua).
- Lukutarkkuuden menetys: JavaScript-luvut, jotka ovat suurempia kuin 2^53 - 1 (9 007 199 254 740 991), menettävät tarkkuutensa hiljaisesti.
Tietoturvan parhaat käytännöt: Älä koskaan arvioi JSON-dataa eval()-funktiolla. Käytä JSON.parse()-metodia ja puhdista '__proto__'-ominaisuudet rekursiivisissa olion yhdistämisfunktioissa.
Historia ja virstanpylväät
Tärkeimmät edut
- Ihmisen luettavissa oleva, itseään kuvaava ja ytimekäs tietorakenne.
- Sisäänrakennettu jäsentämistuki JavaScript-moottoreissa (JSON.parse) ja kaikissa merkittävissä ohjelmointikielissä.
- Tiukka spesifikaatio estää mielivaltaisen koodin suorittamisen.
Tekniset rajoitukset
- Ei tukea kommenteille, loppuun jätetyille pilkuille tai kehäviittauksille olioissa.
- Ei natiiveja binäärityyppejä (binääridata on koodattava Base64-muotoon, mikä kasvattaa kokoa 33 %).
- Tehoton serialisointi verrattuna binäärimuotoihin, kuten Protocol Buffers tai MessagePack.
Mielenkiintoisia teknisiä faktoja
- Douglas Crockford lisäsi alkuperäisiin JSMin JSON-työkaluihin ohjelmistolisenssiehdon 'Ohjelmistoa on käytettävä hyvään, ei pahaan'.
- JSON on tiukka osajoukko JavaScriptin syntaksista, mutta ennen ES2019-standardia raa'at escape-merkeillä esittämättömät U+2028- ja U+2029-merkit olivat kelvollisia JSONissa, mutta virheellisiä JavaScriptin merkkijonoissa.
- Douglas Crockford havaitsi, että varhaiset verkkoselaimet pystyivät jäsentämään JSONin suoraan olioiksi JavaScriptin natiivilla eval()-funktiolla ennen kuin erilliset JSON.parse()-rajapinnat standardoitiin ECMAScript 5:ssä.
Usein kysytyt tekniset kysymykset
Miksi JSON ei salli kommentteja?
JSON-kielioppi ei salli kommentteja. Toteutukset voivat käsitellä laajennuksia ja sovelluskohtaisia tietoja eri tavoin, joten formaatti ei yksin takaa yhteentoimivuutta.
Miten tallennan 64-bittisiä kokonaislukuja JSON-muodossa ilman tarkkuuden menetystä?
JavaScriptin natiivi Number-tietotyyppi on IEEE 754 -standardin mukainen desimaaliluku (double-precision float), joka tukee tarkasti vain kokonaislukuja 2^53 - 1 asti. 64-bittiset kokonaisluvut (kuten tietokannan tunnisteet tai aikaleimat) on serialisoitava merkkijonoina (esim. '1234567890123456789') JSON-muodossa.
Mitä eroa on JSONilla ja NDJSON / JSON Lines -muodoilla?
Standardi JSON käärii koko tietokuorman yhteen ainoaan juuriolioon tai -taulukkoon, mikä edellyttää jäsennysten lataavan koko tekstin ennen sen arviointia. NDJSON (Newline Delimited JSON) erottaa yksittäiset kelvolliset JSON-tietueet rivinvaihtomerkeillä (\n), mikä mahdollistaa massiivisten useiden gigatavujen tietoaineistojen muistitehokkaan rivikohtaisen suoratoiston.
Aiheeseen liittyvät JSON-muunnosparit
JSON-datan muuntaminen HTML-lähdekoodiksi muuttaa raa'at jäsennetyt avain-arvoparit ihmisen luettaviksi verkkodokumenteiksi, jotka ovat valmiita selaimen renderöintiin.
HTML-lähdekoodin muuttaminen JSON-dataksi muuttaa ihmisen luettavat verkkodokumentit jäsennetyiksi avain-arvopareiksi ohjelmallista käsittelyä ja API-syöttöä varten.
SQL-vedostekstiskriptin muuttaminen JSON-tietovienniksi muuntaa jäykät relaatiotietokantataulut joustaviksi, sisäkkäisiksi objekteiksi moderneja verkkosovelluksia varten.
Jäsentelemättömien JSON-tekstitiedostojen muuttaminen jäsennetyiksi SQLite-relaatiotietokannoiksi mahdollistaa suurten tietueiden nopean indeksoinnin ja kyselyjen tekemisen.
Adobe Swatch Exchange -tiedostojen muuntaminen Color JSON -rakenteiksi muuttaa binaariset suunnittelupaletit luettaviksi tekstiobjekteiksi moderneille verkkosovelluksille.
Väri-JSON-muotoisen datan muuntaminen Adobe ASE -binaarinäytteiksi yhdistää verkkopohjaiset suunnittelutunnisteet työpöydän ammattisovelluksiin.
GIMP-paletin tekstitiedostojen muuntaminen väri-JSON-rakenteiksi mahdollistaa sen, että verkkosovellukset voivat lukea värikarttoja suoraan ilman monimutkaisia jäsennysskriptejä.
Jäsennettyjen väri-JSON-tiedostojen muuntaminen CSS-muuttujiksi muuntaa raakadataoliot sivustojen natiiveiksi tyylitellyiksi ominaisuuksiksi.