JSON-data (.json)

RFC Standard

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

Välj eller släpp filer här

Privat - filer lämnar aldrig din enhet

eller klistra in Ctrl+V
Integritetsgaranti utan nätverksöverföring: 0 byte laddades upp till externa servrar. All bearbetning skedde lokalt i webbläsarens sandlåda.

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 5B

ASCII-REPRESENTATION: { or [

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

Tekniska specifikationer

ContainerarkitekturLättviktigt, textbaserat och språkoberoende format för datautbyte
KomprimeringJSON-text kan komprimeras med Gzip, Brotli och Zstandard; resultatets storlek beror på data och inställningar
ByteordningUTF-8-kodad Unicode (Byte Order Mark / BOM rekommenderas inte)
FärgrymderEj tillämpligt
Kanaler och strukturSex grundläggande datatyper: objekt, array, sträng, tal, booleskt värde och null
Maximala dimensionerObegränsat; begränsas endast av parserns minneskapacitet och den maximala stränglängden
TransparensEj tillämpligt
Strömning och progressiv visningNDJSON (Newline Delimited JSON) / JSON Lines möjliggör progressiv strömbehandling

Teknisk jämförelsematris: JSON jämfört med konkurrenter

Tekniskt attributJSON (Aktuell)YAMLXMLProtocol Buffers
SyntaxkomplexitetMinimal (6 typer, strikt syntax)Hög (indenteringsbaserad, komplex specifikation)Hög (uttryckliga avslutningstaggar, namnområden)Schemadefinierat binärt trådformat
ParseprestandaExtremt snabb i alla moderna språkLångsam (komplex indenteringstolkning)Måttlig till långsam (tung DOM-konstruktion)Ultrasnabb (binär deserialisering utan kopiering)
Stöd för kommentarerNej (medvetet uteslutet för att förhindra att metadata växer)Ja (#-kommentarer)Ja (<!-- kommentarer -->)Ja i .proto-filer
Nyttolastens storlek över nätverketKompakt text; komprimeringsresultatet beror på data och inställningarKompakt textUtfö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

2017RFC 8259 standardiserar UTF-8 som den enda obligatoriska teckenkodningen för JSON.
2013ECMA-404 definierar JSON-syntaxen, som används av många programmeringsspråk och plattformar.
2001Douglas Crockford specificerar JSON för att möjliggöra tillståndslös datakommunikation mellan webbläsare och server.

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.