Tudományos JSON (.json)
RFC SzabványA 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:
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 5BASCII ÁBRÁZOLÁS: { or [
Szabványosítás: RFC 8259 / ECMA-404 / ISO/IEC 21778
Műszaki specifikációk
| Konténer architektúra | Könnyű súlyú, szövegalapú, programozási nyelvektől független adatcsere-formátum |
| Tömörítés | A 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ájtsorrend | UTF-8 kódolású Unicode (bájtsorrend-jelölő / BOM használata nem javasolt) |
| Színterek | Nem alkalmazható |
| Csatornák és struktúra | Hat alapvető adattípus: objektum, tömb, karakterlánc, szám, logikai érték, null |
| Max. méretek | Korlátlan; kizárólag az elemző memóriája és a maximális karakterlánc-hossz korlátozza |
| Átlátszóság | Nem alkalmazható |
| Streaming és progresszív | Az 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útum | JSON (Jelenlegi) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Szintaxis összetettsége | Minimá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ény | Rendkívül gyors minden modern nyelven | Lassú (ö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ása | Nincs (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érete | Kompakt szöveg; a tömörítés eredménye az adatoktól és a beállításoktól függ. | Kompakt szöveg | Bő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
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
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á.
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.
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.
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.
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.
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.
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.
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.