JSON-data (.json)

RFC Standard

JavaScript Object Notation (JSON) er et let, menneskelæsbart tekstformat til dataudveksling. Det understøttes af mange programmeringssprog og bruges ofte i web-API'er.

Konverter JSON til HTML

Gratis JSON til HTML-konverter i browseren. Konverter filer med det samme på din enhed.

Komprimér JSON online

Privat - filer forlader aldrig din enhed

Undersøgelse og metadata

Operativsystemer og filanalysatorer identificerer JSON-filer ved at inspicere den indledende binære bytesekvens:

Vælg eller træk filer hertil

Privat - filer forlader aldrig din enhed

eller indsæt Ctrl+V
Privatlivsgaranti uden netværksoverførsel: 0 byte overført til eksterne servere. Al behandling foregik lokalt i browserens sandkasse.

Byte-niveau Header-signatur (Magic Bytes)

Operativsystemer og filanalysatorer identificerer JSON-filer ved at inspicere den indledende binære bytesekvens:

HEX-SIGNATUR (OFFSET 0):

7B or 5B

ASCII-REPRÆSENTATION: { or [

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

Tekniske specifikationer

ContainerarkitekturLet, tekstbaseret og sproguafhængigt dataudvekslingsformat
KomprimeringGzip, Brotli og Zstandard kan komprimere JSON-tekst; resultatet afhænger af dataene og indstillingerne.
Byte-rækkefølgeUTF-8-kodet Unicode (det anbefales ikke at bruge Byte Order Mark / BOM)
FarverumIkke relevant
Kanaler og strukturSeks grundlæggende datatyper: objekt, array, streng, tal, boolesk værdi og null.
Maks. dimensionerUbegrænset; begrænses kun af parserens hukommelse og maksimale strenglængde
GennemsigtighedIkke relevant
Streaming og progressivNDJSON (Newline Delimited JSON) / JSON Lines muliggør progressiv strømningsbehandling

Teknisk sammenligningsmatrix: JSON sammenlignet med konkurrenterne

Teknisk attributJSON (Aktuel)YAMLXMLProtocol Buffers
SyntakskompleksitetMinimal (6 typer, streng syntaks)Høj (indrykningsbaseret, kompleks specifikation)Høj (ordrige lukketags, navneområder)Skemadefineret binært dataformat
ParsningsydelseEkstremt hurtig i alle moderne sprogLangsom (kompleks indrykningsanalyse)Moderat til langsom (tung DOM-konstruktion)Ultrahurtig (nul-kopi binær deserialisering)
Kommentarer understøttetNej (bevidst udelukket for at forhindre metadata-vækst)Ja (# kommentarer)Ja (<!-- kommentarer -->)Ja i .proto-filer
NetværksnyttelaststørrelseKompakt tekst; komprimeringsresultatet afhænger af dataene og indstillingerne.Kompakt tekstOrdrig tekst (tung tag-gentagelse)Ultrakompakt binær

Almindelige korruptionstilstande og hex-gendannelsesvejledning

SyntaxError: Uventet token , i JSON ved position X.

Grundlæggende årsag: Afsluttende komma efter det sidste element i et array eller objekt, hvilket er strengt ulovligt i RFC 8259 JSON.

Gendannelse: Fjern afsluttende kommaer fra objektnøgler og arrayelementer, før de sendes til JSON.parse().

SyntaxError: Uventet token ' i JSON.

Grundlæggende årsag: Strenge eller nøgler omsluttet af enkeltanførselstegn ('') i stedet for dobbeltanførselstegn ("").

Gendannelse: Erstat alle enkeltanførselsstrenge og -nøgler med standardstrenge omsluttet af dobbelte anførelsestegn.

Sikkerhedsanalyse og parser-angrebsvektorer

JSON er udelukkende tekstbaseret og sikker mod direkte kodeudførelse, men parsing af ikke-valideret JSON kan føre til prototypeforurening (Prototype Pollution), ReDoS eller hukommelsesudmattelse.

Kendte angrebsvektorer

  • Prototypeforurening (Prototype Pollution): Nøgler ved navn '__proto__' eller 'constructor', der ændrer Object.prototype i JavaScript-applikationer.
  • Stakoverløbsangreb (Denial of Service) via dybt nestede JSON-strukturer (f.eks. 10.000 åbnende klammeparenteser).
  • Tab af numerisk præcision: JavaScript-tal, der er større end 2^53 - 1 (9.007.199.254.740.991), mister ubemærket præcision.

Defensive bedste praksisser: Evaluer aldrig JSON med eval(). Brug JSON.parse() og rens '__proto__'-egenskaber i rekursive objektfletningsfunktioner.

Historisk oprindelse og milepæle

2017RFC 8259 standardiserer UTF-8 som den eneste obligatoriske tegnkodning for JSON.
2013ECMA-404 definerer JSON-syntaksen, som bruges af mange programmeringssprog og platforme.
2001Douglas Crockford specificerer JSON for at muliggøre tilstandsløs browser-til-server-datakommunikation.

Vigtige fordele og styrker

  • Menneskelæsbar, selvbeskrivende og præcis tekststruktur.
  • Indbygget understøttelse af parsing i JavaScript-motorer (JSON.parse) og ethvert større programmeringssprog.
  • Streng specifikation forhindrer vilkårlig kodeudførelse.

Tekniske begrænsninger og ulemper

  • Ingen understøttelse af kommentarer, afsluttende kommaer eller cirkulære objektreferencer.
  • Ingen indbyggede binære typer (binære data skal base64-kodes, hvilket øger størrelsen med 33%).
  • Ineffektiv serialisering sammenlignet med binære formater som Protocol Buffers eller MessagePack.

Interessante tekniske fakta

  • Douglas Crockford tilføjede softwarelicensklausulen 'The Software shall be used for Good, not Evil' til de originale JSMin JSON-værktøjer.
  • JSON er en streng delmængde af JavaScript-syntaksen, men indtil ES2019 var rå, uescapede U+2028- og U+2029-tegn gyldige i JSON, men ugyldige i JavaScript-strenge.
  • Douglas Crockford opdagede, at tidlige webbrowsere kunne evaluere JSON direkte til objekter ved hjælp af JavaScripts indbyggede eval(), før dedikerede JSON.parse()-API'er blev standardiseret i ECMAScript 5.

Ofte stillede tekniske spørgsmål

Hvorfor tillader JSON ikke kommentarer?

JSON-grammatikken tillader ikke kommentarer. Implementeringer kan håndtere udvidelser og programspecifikke data forskelligt, så formatet alene garanterer ikke interoperabilitet.

Hvordan gemmer man 64-bits heltal i JSON uden at miste præcision?

JavaScripts oprindelige Number-type er et IEEE 754 flydende tal med dobbelt præcision, som kun understøtter heltal op til 2^53 - 1 præcist. 64-bits heltal (såsom database-id'er eller tidsstempler) skal serialiseres som strenge (f.eks. '1234567890123456789') i JSON.

Hvad er forskellen mellem JSON og NDJSON / JSON Lines?

Standard JSON indpakker en hel nyttelast i et enkelt rodobjekt eller array, hvilket kræver, at parserne indlæser hele teksten før evaluering. NDJSON (Newline Delimited JSON) adskiller individuelle gyldige JSON-poster med linjeskiftstegn (\n), hvilket muliggør hukommelseseffektiv linje-for-linje-streaming af massive datasæt på flere gigabyte.