JSON-data (.json)

RFC Standardi

JavaScript 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:

Valitse tai pudota tiedostot tähän

Yksityisesti - tiedostot eivät koskaan poistu laitteeltasi

tai liitä Ctrl+V
Tietosuojatakuu: 0 % verkkosiirtoa Ulkoisille palvelimille ei ole ladattu yhtään tavua. Kaikki käsittely tapahtui paikallisesti selaimen hiekkalaatikossa.

Otsaketunniste tavutasolla (tunnistetavut)

Käyttöjärjestelmät ja tiedostoanalyysaattorit tunnistavat JSON-tiedostot tarkistamalla tiedoston alun binäärisarjan:

HEKSADEKSIMAALINEN TUNNISTE (SIJAINTI 0):

7B or 5B

ASCII-ESITYSTAPA: { or [

Standardointi: RFC 8259 / ECMA-404 / ISO/IEC 21778

Tekniset tiedot

SäiliöarkkitehtuuriKevyt, tekstipohjainen, kielestä riippumaton tiedonsiirtomuoto
PakkausGzip-, 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äriavaruudetEi sovellettavissa
Kanavat ja rakenneKuusi perustietotyyppiä: olio, taulukko, merkkijono, luku, totuusarvo, null
Suurimmat mitatRajoittamaton; rajoittuu vain jäsentimen muistiin ja merkkijonon enimmäispituuteen
LäpinäkyvyysEi sovellettavissa
Suoratoisto ja progressiivinen latausNDJSON (Newline Delimited JSON) / JSON Lines mahdollistaa portaittaisen virtaprosessoinnin

Tekninen vertailumatriisi: JSON vs. kilpailijat

Tekninen attribuuttiJSON (Nykyinen)YAMLXMLProtocol Buffers
Syntaksin monimutkaisuusMinimaalinen (6 tyyppiä, tiukka syntaksi)Korkea (sisennyksiin perustuva, monimutkainen spesifikaatio)Korkea (runsassanaiset sulkutunnisteet, nimiavaruudet)Kaavamääritelty binäärinen siirtomuoto
Jäsentämisen suorituskykyErittä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 tukiEi (jätetty tarkoituksella pois metatiedon paisumisen ehkäisemiseksi)Kyllä (#-kommentit)Kyllä (<!-- kommentit -->)Kyllä .proto-tiedostoissa
Verkkokuorman kokoKompakti teksti; pakkaustulos riippuu datasta ja asetuksista.Kompakti tekstiRunsassanainen 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

2017RFC 8259 standardoi UTF-8:n JSON-muodon ainoaksi pakolliseksi merkistökoodaukseksi.
2013ECMA-404 määrittelee JSON-syntaksin, jota käytetään monissa ohjelmointikielissä ja alustoissa.
2001Douglas Crockford määritteli JSONin mahdollistaakseen tilattoman selain-palvelin-tiedonsiirron.

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