Tudományos JSON (.json)

RFC Szabvány

A JavaScript Object Notation (JSON) könnyű, ember által olvasható adatformátum, amelyet számos programozási nyelv támogat, és amelyet gyakran használnak webes API-kban.

JSON konvertálása erre: HTML

Ingyenes, böngészőben használható JSON-konverter HTML formátumba. A fájlokat azonnal konvertálhatja az eszközén.

JSON tömörítése online

Privát - a fájlok soha nem hagyják el az eszközét

Vizsgálat és metaadatok

Az operációs rendszerek és a fájlelemzők a kezdő bináris bájtsorozat vizsgálatával azonosítják a(z) JSON fájlokat:

Válasszon ki vagy húzzon ide fájlokat

Privát - a fájlok soha nem hagyják el az eszközét

vagy beillesztés Ctrl+V
Adatvédelmi garancia hálózati adatátvitel nélkül: 0 bájt került fel külső szerverekre. Minden feldolgozás helyben, a böngésző elkülönített környezetében történt.

Bájtszintű fejlécaláírás (fájlazonosító bájtok)

Az operációs rendszerek és a fájlelemzők a kezdő bináris bájtsorozat vizsgálatával azonosítják a(z) JSON fájlokat:

HEX ALÁÍRÁS (ELTOLÁS 0):

7B or 5B

ASCII ÁBRÁZOLÁS: { or [

Szabványosítás: RFC 8259 / ECMA-404 / ISO/IEC 21778

Műszaki specifikációk

Konténer architektúraKönnyű súlyú, szövegalapú, programozási nyelvektől független adatcsere-formátum
TömörítésA Gzip, a Brotli és a Zstandard tömörítheti a JSON-szöveget; a tömörített méret az adatoktól és a beállításoktól függ.
BájtsorrendUTF-8 kódolású Unicode (bájtsorrend-jelölő / BOM használata nem javasolt)
SzínterekNem alkalmazható
Csatornák és struktúraHat alapvető adattípus: objektum, tömb, karakterlánc, szám, logikai érték, null
Max. méretekKorlátlan; kizárólag az elemző memóriája és a maximális karakterlánc-hossz korlátozza
ÁtlátszóságNem alkalmazható
Streaming és progresszívAz NDJSON (Newline Delimited JSON) / JSON Lines lehetővé teszi a progresszív adatfolyam-feldolgozást

Műszaki összehasonlító mátrix: JSON vs. versenytársak

Technikai attribútumJSON (Jelenlegi)YAMLXMLProtocol Buffers
Szintaxis összetettségeMinimális (6 típus, szigorú szintaxis)Magas (behúzásalapú, komplex specifikáció)Magas (bőbeszédű zárótagelhelyezések, névterek)Séma által meghatározott bináris átviteli formátum
Elemzési teljesítményRendkívül gyors minden modern nyelvenLassú (összetett behúzások elemzése)Mérsékelt vagy lassú (nagy erőforrásigényű DOM-felépítés)Ultragyors (másolás nélküli bináris deszerializáció)
Megjegyzések támogatásaNincs (szándékosan kizárva a metaadatok elszaporodásának megakadályozására)Igen (# megjegyzések)Igen (<!-- megjegyzések -->)Igen .proto fájlokban
Hálózati adatcsomag méreteKompakt szöveg; a tömörítés eredménye az adatoktól és a beállításoktól függ.Kompakt szövegBőbeszédű szöveg (gyakori címkeismétlés)Ultrakompakt bináris

Gyakori sérülési módok és hexadecimális helyreállítási útmutató

SyntaxError: A JSON-adatban váratlan „,” token szerepel az X. pozíción.

Kiváltó ok: Záró vessző a tömb vagy objektum utolsó eleme után, ami szigorúan illegális az RFC 8259 szabványú JSON-ben.

Helyreállítás: Távolítsa el a záró vesszőket az objektumkulcsok és a tömbelemek után, mielőtt a JSON.parse() függvénynek átadná.

SyntaxError: Váratlan „'” token a JSON-adatban.

Kiváltó ok: Karakterláncok vagy kulcsok egyszeres idézőjelek közé zárva ('') dupla idézőjelek (" ") helyett.

Helyreállítás: Cserélje le az összes egyszeres idézőjeles karakterláncot és kulcsot szabványos dupla idézőjeles karakterláncokra.

Biztonsági elemzés és elemző (parser) támadási vektorok

A JSON kizárólag szöveges, és önmagában nem tesz lehetővé közvetlen kódvégrehajtást, de a nem megbízható JSON elemzése prototípus-szennyezéshez (Prototype Pollution), ReDoS-hoz vagy memóriakimerüléshez vezethet.

Ismert támadási vektorok

  • Prototípus-szennyezés (Prototype Pollution): A '__proto__' vagy 'constructor' nevű kulcsok módosítják az Object.prototype-ot a JavaScript-alkalmazásokban.
  • Vezérlési verem túlcsordulásos szolgáltatásmegtagadás mélyen beágyazott JSON-struktúrák révén (pl. 10 000 nyitó zárójel).
  • Numerikus pontosság elvesztése: A 2^53 - 1-nél (9 007 199 254 740 991) nagyobb JavaScript-számok észrevétlenül elveszítik a pontosságukat.

Ajánlott védekezési módszerek: Soha ne értékeljen ki JSON-t az eval() függvénnyel. Használja a JSON.parse() függvényt, és tisztítsa meg a '__proto__' tulajdonságokat a rekurzív objektum-összevonó függvényekben.

Történeti háttér és mérföldkövek

2017Az RFC 8259 szabványosítja az UTF-8 kódolást a JSON egyetlen kötelező karakterkódolásaként.
2013Az ECMA-404 a JSON szintaxisát határozza meg, amelyet számos programozási nyelv és platform használ.
2001Douglas Crockford a JSON-t az állapotmentes böngésző és szerver közötti adatkommunikáció lehetővé tételére dolgozza ki.

Főbb előnyök

  • Emberi szemmel olvasható, önmagát leíró és tömör szöveges szerkezet.
  • Beépített natív elemzési támogatás a JavaScript-motorokban (JSON.parse) és minden nagyobb programozási nyelvben.
  • A szigorú specifikáció megakadályozza a tetszőleges kódok futtatását.

Technikai korlátok és hátrányok

  • Nincs támogatás megjegyzésekhez, záró vesszőkhöz vagy körkörös objektumhivatkozásokhoz.
  • Nincsenek natív bináris típusok (a bináris adatokat Base64-gyel kell kódolni, ami 33%-kal növeli a méretet).
  • Nem hatékony szerializáció a bináris formátumokhoz, például a Protocol Buffershöz vagy a MessagePackhöz képest.

Érdekes technikai tudnivalók

  • Douglas Crockford hozzáadta „A szoftvert jóra, nem gonoszra kell használni” szoftverlicenc-záradékát az eredeti JSMin JSON-eszközökhöz.
  • A JSON a JavaScript szintaxis szigorú részhalmaza, de az ES2019-ig a nyers, nem escape-elt U+2028 és U+2029 karakterek érvényesek voltak a JSON-ben, de érvénytelenek a JavaScript karakterláncokban.
  • Douglas Crockford felfedezte, hogy a korai webböngészők képesek voltak a JSON-t közvetlenül objektumokká értékelni a JavaScript natív eval() függvényével, mielőtt a dedikált JSON.parse() API-kat szabványosították volna az ECMAScript 5-ben.

Gyakran Ismételt Műszaki Kérdések

Miért nem engedélyezi a JSON a megjegyzéseket?

A JSON nyelvtana nem engedélyezi a megjegyzéseket. A megvalósítások eltérően kezelhetik a bővítményeket és az alkalmazásspecifikus adatokat, ezért a formátum önmagában nem garantálja az együttműködést.

Hogyan lehet 64 bites egész számokat tárolni JSON-ben a pontosság elvesztése nélkül?

A JavaScript natív Number típusa egy IEEE 754 szerinti dupla pontos lebegőpontos szám, amely csak a 2^53 - 1-ig terjedő egész számokat támogatja pontosan. A 64 bites egész számokat (például adatbázis-azonosítókat vagy időbélyegeket) karakterláncként (pl. '1234567890123456789') kell szerializálni a JSON-ben.

Mi a különbség a JSON és az NDJSON / JSON Lines között?

A szabványos JSON egyetlen gyökérobjektumba vagy tömbbe csomagol egy teljes adatmennyiséget, ami megköveteli az elemzőktől a teljes szöveg betöltését a kiértékelés előtt. Az NDJSON (Newline Delimited JSON) újsor karakterekkel (\n) választja el az egyes érvényes JSON-rekordokat, lehetővé téve a hatalmas, több gigabájtos adathalmazok memóriahatékony, soronkénti adatfolyamként történő feldolgozását.

Kapcsolódó JSON konverziós párok

JSON - HTML

A JSON-adatok HTML-forráskóddá alakítása a nyers, strukturált kulcs-érték párokat ember által olvasható, böngészőben megjelenítésre kész webdokumentumokká.

HTML - JSON

A HTML-forrás JSON-adattá alakítása az ember által olvasható webdokumentumokat strukturált kulcs-érték párokká alakítja, amelyeket programok dolgozhatnak fel, illetve API-k fogadhatnak be.

SQL - JSON

Az SQL Dump szöveges parancsfájl JSON-adatexporttá alakítása a merev relációs adatbázistáblákat rugalmas, beágyazott objektumokká alakítja a modern webalkalmazások számára.

JSON - SQLITE

A nem strukturált JSON-szövegfájlok átalakítása strukturált SQLite relációs adatbázisokká lehetővé teszi a nagy adatrekordok gyors indexelését és lekérdezését.

ASE - JSON

Az Adobe Swatch Exchange-fájlok Color JSON-struktúrákká alakítása olvasható szöveges objektumokká alakítja a bináris színpalettákat a modern webalkalmazások számára.

JSON - ASE

A Color JSON szöveges adatok Adobe ASE bináris színmintákká alakítása kapcsolatot teremt a webes dizájntokenek és a professzionális asztali kiadványszerkesztő alkalmazások között.

GPL - JSON

A GIMP-palettafájlok Color JSON-struktúrákká alakítása lehetővé teszi a webalkalmazások számára, hogy összetett elemzőeszközök nélkül közvetlenül olvassák be a színmintákat.

JSON - CSS

A strukturált Color JSON-fájlok CSS-változókká alakítása a nyers adatobjektumokat a webhelyek natív stílustulajdonságaivá alakítja.