JSON-data (.json)
RFC StandardJavaScript Object Notation (JSON) är ett lättviktigt och lättläst textformat för datautbyte. Det stöds av många programmeringsspråk och används ofta i webb-API:er.
Konvertera JSON till HTML
Gratis konverterare från JSON till HTML i webbläsaren. Konvertera filer direkt på din enhet.
Komprimera JSON online
Privat - filer lämnar aldrig din enhet
Granska och metadata
Operativsystem och filanalysverktyg identifierar JSON-filer genom att granska den inledande sekvensen av binära byte:
Signatur i filhuvudet på bytenivå (magiska byte)
Operativsystem och filanalysverktyg identifierar JSON-filer genom att granska den inledande sekvensen av binära byte:
HEX-SIGNATUR (OFFSET 0):
7B or 5BASCII-REPRESENTATION: { or [
Standardisering: RFC 8259 / ECMA-404 / ISO/IEC 21778
Tekniska specifikationer
| Containerarkitektur | Lättviktigt, textbaserat och språkoberoende format för datautbyte |
| Komprimering | JSON-text kan komprimeras med Gzip, Brotli och Zstandard; resultatets storlek beror på data och inställningar |
| Byteordning | UTF-8-kodad Unicode (Byte Order Mark / BOM rekommenderas inte) |
| Färgrymder | Ej tillämpligt |
| Kanaler och struktur | Sex grundläggande datatyper: objekt, array, sträng, tal, booleskt värde och null |
| Maximala dimensioner | Obegränsat; begränsas endast av parserns minneskapacitet och den maximala stränglängden |
| Transparens | Ej tillämpligt |
| Strömning och progressiv visning | NDJSON (Newline Delimited JSON) / JSON Lines möjliggör progressiv strömbehandling |
Teknisk jämförelsematris: JSON jämfört med konkurrenter
| Tekniskt attribut | JSON (Aktuell) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Syntaxkomplexitet | Minimal (6 typer, strikt syntax) | Hög (indenteringsbaserad, komplex specifikation) | Hög (uttryckliga avslutningstaggar, namnområden) | Schemadefinierat binärt trådformat |
| Parseprestanda | Extremt snabb i alla moderna språk | Långsam (komplex indenteringstolkning) | Måttlig till långsam (tung DOM-konstruktion) | Ultrasnabb (binär deserialisering utan kopiering) |
| Stöd för kommentarer | Nej (medvetet uteslutet för att förhindra att metadata växer) | Ja (#-kommentarer) | Ja (<!-- kommentarer -->) | Ja i .proto-filer |
| Nyttolastens storlek över nätverket | Kompakt text; komprimeringsresultatet beror på data och inställningar | Kompakt text | Utförlig text (tung taggupprepning) | Ultrakompakt binär |
Vanliga skadeorsaker och hex-återställningsguide
SyntaxError: oväntat tecken , i JSON vid position X.
Grundorsak: Ett kommatecken efter det sista objektet i en array eller ett objekt, vilket är förbjudet enligt RFC 8259 JSON.
Återställning: Ta bort efterföljande kommatecken från nycklar och arrayposter innan de skickas till JSON.parse().
SyntaxError: oväntat tecken ' i JSON.
Grundorsak: Strängar eller nycklar omgivna av enkla citattecken ('') istället för dubbla citattecken ("").
Återställning: Ersätt alla enkelcitatomgivna strängar och nycklar med vanliga dubbelcitatomgivna strängar.
Säkerhetsanalys och attackvektorer för tolkar
JSON är endast text och säkert mot direkt kodkörning, men att parsa otillförlitlig JSON kan leda till prototypförorening, ReDoS eller minnesuttömning.
Kända attackvektorer
- Prototypförorening: Nycklar med namnet '__proto__' eller 'constructor' modifierar Object.prototype i JavaScript-applikationer.
- DoS-attacker genom stack overflow i djupt nästlade JSON-strukturer (t.ex. 10 000 öppningsklamrar).
- Förlust av numerisk precision: JavaScript-tal som är större än 2^53 - 1 (9 007 199 254 740 991) tappar precision utan förvarning.
Rekommenderade skyddsåtgärder: Utvärdera aldrig JSON med eval(). Använd JSON.parse() och sanera '__proto__'-egenskaper i rekursiva objektsammanslagningsfunktioner.
Historiskt ursprung och milstolpar
Viktiga fördelar
- Mänskligt läsbar, självbeskrivande och koncis textstruktur.
- Inbyggt stöd för parsning i JavaScript-motorer (JSON.parse) och alla större programmeringsspråk.
- Strikt specifikation förhindrar godtycklig kodkörning.
Tekniska begränsningar
- Inget stöd för kommentarer, efterföljande kommatecken eller cirkulära objektreferenser.
- Inga inbyggda binära typer (binär data måste vara base64-kodad, vilket ökar storleken med 33%).
- Ineffektiv serialisering jämfört med binära format som Protocol Buffers eller MessagePack.
Intressant teknisk kuriosa
- Douglas Crockford lade till mjukvarulicensklausulen 'The Software shall be used for Good, not Evil' till de ursprungliga JSMin JSON-verktygen.
- JSON är en strikt delmängd av JavaScript-syntaxen, men fram till ES2019 var råa, oescapade tecken U+2028 och U+2029 giltiga i JSON men ogiltiga i JavaScript-strängar.
- Douglas Crockford upptäckte att tidiga webbläsare kunde utvärdera JSON direkt till objekt med hjälp av JavaScripts inbyggda eval() innan dedikerade JSON.parse()-API:er standardiserades i ECMAScript 5.
Vanliga tekniska frågor
Varför tillåter inte JSON kommentarer?
JSON-grammatiken tillåter inte kommentarer. Implementationer kan hantera tillägg och programspecifika data på olika sätt, så formatet garanterar inte interoperabilitet på egen hand.
Hur lagrar man 64-bitars heltal i JSON utan att förlora precision?
JavaScripts inbyggda taltyp är ett IEEE 754 flyttal med dubbel precision, vilket endast stöder heltal upp till 2^53 - 1 exakt. 64-bitars heltal (som databas-ID:n eller tidsstämplar) måste serialiseras som strängar (t.ex. '1234567890123456789') i JSON.
Vad är skillnaden mellan JSON och NDJSON / JSON Lines?
Standard-JSON kapslar in hela nyttolasten i ett enda rotobjekt eller en enda array, vilket kräver att JSON-tolkar läser in hela texten innan den kan bearbetas. NDJSON (Newline Delimited JSON) separerar enskilda giltiga JSON-poster med nyradstecken (\n), vilket möjliggör minneseffektiv rad-för-rad-strömning av enorma datamängder på flera gigabyte.
Relaterade konverteringspar för JSON
Genom att konvertera JSON-data till HTML-källkod omvandlas råa strukturerade nyckel-värdepar till läsbara webbdokument som är redo för webbläsarrendering.
Att konvertera HTML-källkod till JSON-data förvandlar läsbara webbdokument till strukturerade nyckel-värdepar för programvarubearbetning och API-inmatning.
Konvertering av ett SQL Dump-textskript till en JSON-dataexport omvandlar stela relationella databastabeller till flexibla, nästlade objekt för moderna webbapplikationer.
Omvandling av ostrukturerade JSON-textfiler till strukturerade relationella SQLite-databaser möjliggör snabb indexering och sökning i stora datamängder.
Konvertering av Adobe Swatch Exchange-filer till färg-JSON-strukturer förvandlar binära designpaletter till läsbara textobjekt för moderna webbapplikationer.
Konvertering av färg-JSON-textdata till binära Adobe ASE-färgprover överbryggar webbaserade designtokens och professionella layoutapplikationer för skrivbordet.
Konvertering av GIMP Palette-textfiler till färg-JSON-strukturer gör att webbapplikationer kan läsa färgprov direkt utan komplexa tolkningsskript.
Konvertering av strukturerade färg-JSON-filer till CSS-variabler förvandlar rådataobjekt till inbyggda stilegenskaper för webbplatser.