JSON-data (.json)

RFC Standard

JavaScript Object Notation (JSON) er et lett og lettlest tekstformat for datautveksling som støttes av mange programmeringsspråk og ofte brukes i nett-API-er.

Konverter JSON til HTML

Gratis JSON til HTML-konverterer i nettleseren. Konverter filer umiddelbart på enheten din.

Komprimer JSON på nett

Privat - filer forlater aldri enheten din

Inspeksjon og metadata

Operativsystemer og filanalysatorer identifiserer JSON-filer ved å undersøke den innledende binære bytesekvensen:

Velg eller slipp filer her

Privat - filer forlater aldri enheten din

eller lim inn Ctrl+V
Personverngaranti uten nettverksoverføring: 0 byte ble lastet opp til eksterne servere. All behandling foregikk lokalt i det isolerte nettlesermiljøet ditt.

Filsignatur på bytenivå (magiske byte)

Operativsystemer og filanalysatorer identifiserer JSON-filer ved å undersøke den innledende binære bytesekvensen:

HEX-SIGNATUR (OFFSET 0):

7B or 5B

ASCII-REPRESENTASJON: { or [

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

Tekniske spesifikasjoner

BeholderarkitekturLett, tekstbasert, språkuavhengig datautvekslingsformat
KomprimeringGzip, Brotli og Zstandard kan komprimere JSON-tekst; resultatet avhenger av dataene og innstillingene
BytterekkefølgeUTF-8-kodet Unicode (ingen Byte Order Mark / BOM anbefalt)
FargeromIkke relevant
Kanaler og strukturSeks grunnleggende datatyper: objekt, matrise (array), streng, tall, boolsk verdi, null
Maks. dimensjonerUbegrenset; begrenset bare av parserens minne og maksimal strenglengde
GjennomsiktighetIkke relevant
Strømming og progressiv visningNDJSON (Newline Delimited JSON) / JSON Lines muliggjør progressiv strømmebehandling

Teknisk sammenligningsmatrise: JSON sammenlignet med konkurrenter

Teknisk attributtJSON (Gjeldende)YAMLXMLProtocol Buffers
SyntakskompleksitetMinimal (6 typer, streng syntaks)Høy (innrykkbasert, kompleks spesifikasjon)Høy (utfyllende avslutningstagger, navnerom)Skjemadefinert binært overføringsformat
ParseytelseEkstremt raskt i alle moderne språkTregt (kompleks parsing av innrykk)Moderat til tregt (tung DOM-konstruksjon)Ultraraskt (nullkopi-binærdeserialisering)
Støtte for kommentarerNei (bevisst utelatt for å hindre at metadata hoper seg opp)Ja (# kommentarer)Ja (<!-- kommentarer -->)Ja i .proto-filer
NettverksnyttelaststørrelseKompakt tekst; komprimeringsresultatet avhenger av dataene og innstillingeneKompakt tekstUtførlig tekst (mye gjentakelse av tagger)Ultrakompakt binærformat

Vanlige korrupsjonsmoduser og heksadesimal gjenopprettingsveiledning

Syntaksfeil i JSON: Uventet komma ved posisjon X.

Underliggende årsak: Avsluttende komma etter det siste elementet i en matrise eller et objekt, noe som er strengt ulovlig i RFC 8259 JSON.

Utbedring: Fjern avsluttende kommaer fra objekter og matriser før de sendes til JSON.parse().

Syntaksfeil i JSON: Uventet apostrof.

Underliggende årsak: Strenger eller nøkler omsluttet av enkle anførselstegn ('') i stedet for doble anførselstegn ("").

Utbedring: Erstatt alle enkeltanførte strenger og nøkler med standard strenger i doble anførselstegn.

Sikkerhetsanalyse og angrepsvektorer mot parsere

JSON består kun av tekst og er trygt mot direkte kodekjøring, men parsing av ikke-tillitsvekkende JSON kan føre til prototypeforurensning, ReDoS eller minneutmattelse.

Kjente angrepsvektorer

  • Prototypeforurensning (Prototype Pollution): Nøkler som heter '__proto__' eller 'constructor' endrer Object.prototype i JavaScript-applikasjoner.
  • Stakkoversvømmelse (stack overflow) forårsaket av tjenestenekt via dypt nestede JSON-strukturer (f.eks. 10 000 åpningsklammer).
  • Tap av numerisk presisjon: JavaScript-tall som er større enn 2^53 - 1 (9 007 199 254 740 991) mister presisjonen uten at det varsles.

Anbefalte sikkerhetstiltak: Evaluer aldri JSON med eval(). Bruk JSON.parse() og fjern '__proto__'-egenskaper i rekursive funksjoner for sammenslåing av objekter.

Historisk opprinnelse og milepæler

2017RFC 8259 standardiserer UTF-8 som den eneste obligatoriske tegnkodingen for JSON.
2013ECMA-404 definerer JSON-syntaksen som brukes av mange programmeringsspråk og plattformer.
2001Douglas Crockford spesifiserer JSON for å muliggjøre tilstandsløs datakommunikasjon mellom nettleser og server.

Viktige fordeler

  • Menneskelig lesbar, selvbeskrivende og konsis tekststruktur.
  • Innebygd støtte for parsing i JavaScript-motorer (JSON.parse) og alle større programmeringsspråk.
  • Streng spesifikasjon forhindrer vilkårlig kodekjøring.

Tekniske begrensninger og ulemper

  • Ingen støtte for kommentarer, avsluttende kommaer eller sirkulære objektreferanser.
  • Ingen innebygde binære typer (binærdata må base64-kodes, noe som øker størrelsen med 33%).
  • Ineffektiv serialisering sammenlignet med binære formater som Protocol Buffers eller MessagePack.

Interessante tekniske fakta

  • Douglas Crockford la til programvarelisensklausulen 'Programvaren skal brukes til det gode, ikke til det onde' (The Software shall be used for Good, not Evil) i de opprinnelige JSMin JSON-verktøyene.
  • JSON er en streng undermengde av JavaScript-syntaksen, men frem til ES2019 var rå, uescapede U+2028- og U+2029-tegn gyldige i JSON, men ugyldige i JavaScript-strenger.
  • Douglas Crockford oppdaget at tidlige nettlesere kunne evaluere JSON direkte til objekter ved hjelp av JavaScripts innebygde eval() før dedikerte JSON.parse()-API-er ble standardisert i ECMAScript 5.

Ofte stilte tekniske spørsmål

Hvorfor tillater ikke JSON kommentarer?

JSON-grammatikken tillater ikke kommentarer. Implementasjoner kan håndtere utvidelser og programspesifikke data ulikt, så formatet alene garanterer ikke interoperabilitet.

Hvordan lagrer du 64-biters heltall i JSON uten å miste presisjon?

JavaScripts innebygde talltype (Number) er et IEEE 754 flyttall med dobbel presisjon, som bare støtter heltall opp til 2^53 - 1 nøyaktig. 64-biters heltall (som database-ID-er eller tidsstempler) må serialiseres som strenger (f.eks. '1234567890123456789') i JSON.

Hva er forskjellen mellom JSON og NDJSON / JSON Lines?

Standard JSON omslutter en hel nyttelast i ett enkelt rotobjekt eller en matrise, noe som krever at parsere laster hele teksten før den evalueres. NDJSON (Newline Delimited JSON) skiller individuelle gyldige JSON-poster med linjeskifttegn (\n), noe som muliggjør minneeffektiv linje-for-linje-strømming av massive datasett på flere gigabyte.