JSON-data (.json)
RFC StandardJavaScript 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:
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 5BASCII-REPRESENTASJON: { or [
Standardisering: RFC 8259 / ECMA-404 / ISO/IEC 21778
Tekniske spesifikasjoner
| Beholderarkitektur | Lett, tekstbasert, språkuavhengig datautvekslingsformat |
| Komprimering | Gzip, Brotli og Zstandard kan komprimere JSON-tekst; resultatet avhenger av dataene og innstillingene |
| Bytterekkefølge | UTF-8-kodet Unicode (ingen Byte Order Mark / BOM anbefalt) |
| Fargerom | Ikke relevant |
| Kanaler og struktur | Seks grunnleggende datatyper: objekt, matrise (array), streng, tall, boolsk verdi, null |
| Maks. dimensjoner | Ubegrenset; begrenset bare av parserens minne og maksimal strenglengde |
| Gjennomsiktighet | Ikke relevant |
| Strømming og progressiv visning | NDJSON (Newline Delimited JSON) / JSON Lines muliggjør progressiv strømmebehandling |
Teknisk sammenligningsmatrise: JSON sammenlignet med konkurrenter
| Teknisk attributt | JSON (Gjeldende) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Syntakskompleksitet | Minimal (6 typer, streng syntaks) | Høy (innrykkbasert, kompleks spesifikasjon) | Høy (utfyllende avslutningstagger, navnerom) | Skjemadefinert binært overføringsformat |
| Parseytelse | Ekstremt raskt i alle moderne språk | Tregt (kompleks parsing av innrykk) | Moderat til tregt (tung DOM-konstruksjon) | Ultraraskt (nullkopi-binærdeserialisering) |
| Støtte for kommentarer | Nei (bevisst utelatt for å hindre at metadata hoper seg opp) | Ja (# kommentarer) | Ja (<!-- kommentarer -->) | Ja i .proto-filer |
| Nettverksnyttelaststørrelse | Kompakt tekst; komprimeringsresultatet avhenger av dataene og innstillingene | Kompakt tekst | Utfø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
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.
Relaterte konverteringspar for JSON
Konvertering av JSON-data til HTML-kildekode forvandler rå strukturerte nøkkel-verdi-par til menneskelesbare nettdokumenter som er klare for nettlesergjengivelse.
Konvertering av HTML-kildekode til JSON-data forvandler menneskelesbare nettdokumenter til strukturerte nøkkel-verdi-par for programmatisk behandling og API-inntak.
Konvertering av et SQL-dump-tekstskript til en JSON-dataeksport forvandler stive relasjonelle databasetabeller til fleksible, nøstede objekter for moderne webapplikasjoner.
Transformering av ustrukturerte JSON-tekstfiler til strukturerte SQLite-relasjonsdatabaser gir rask indeksering og spørring av store dataposter.
Konvertering av Adobe Swatch Exchange-filer til farge-JSON-strukturer omdanner binære designpaletter til lesbare tekstobjekter for moderne nettapplikasjoner.
Konvertering av farge-JSON-tekstdata til binære Adobe ASE-fargeprøver bygger bro mellom nettbaserte designtokens og profesjonelle skrivebordsapplikasjoner.
Konvertering av GIMP Palette-tekstfiler til farge-JSON-strukturer gjør at nettapplikasjoner kan lese fargeprøver direkte uten komplekse tolkningsskript.
Konvertering av strukturerte farge-JSON-filer til CSS-variabler forvandler rå dataobjekter til innebygde stilegenskaper for nettsider.