JSON-data (.json)
RFC StandardJavaScript 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:
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 5BASCII-REPRÆSENTATION: { or [
Standardisering: RFC 8259 / ECMA-404 / ISO/IEC 21778
Tekniske specifikationer
| Containerarkitektur | Let, tekstbaseret og sproguafhængigt dataudvekslingsformat |
| Komprimering | Gzip, Brotli og Zstandard kan komprimere JSON-tekst; resultatet afhænger af dataene og indstillingerne. |
| Byte-rækkefølge | UTF-8-kodet Unicode (det anbefales ikke at bruge Byte Order Mark / BOM) |
| Farverum | Ikke relevant |
| Kanaler og struktur | Seks grundlæggende datatyper: objekt, array, streng, tal, boolesk værdi og null. |
| Maks. dimensioner | Ubegrænset; begrænses kun af parserens hukommelse og maksimale strenglængde |
| Gennemsigtighed | Ikke relevant |
| Streaming og progressiv | NDJSON (Newline Delimited JSON) / JSON Lines muliggør progressiv strømningsbehandling |
Teknisk sammenligningsmatrix: JSON sammenlignet med konkurrenterne
| Teknisk attribut | JSON (Aktuel) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Syntakskompleksitet | Minimal (6 typer, streng syntaks) | Høj (indrykningsbaseret, kompleks specifikation) | Høj (ordrige lukketags, navneområder) | Skemadefineret binært dataformat |
| Parsningsydelse | Ekstremt hurtig i alle moderne sprog | Langsom (kompleks indrykningsanalyse) | Moderat til langsom (tung DOM-konstruktion) | Ultrahurtig (nul-kopi binær deserialisering) |
| Kommentarer understøttet | Nej (bevidst udelukket for at forhindre metadata-vækst) | Ja (# kommentarer) | Ja (<!-- kommentarer -->) | Ja i .proto-filer |
| Netværksnyttelaststørrelse | Kompakt tekst; komprimeringsresultatet afhænger af dataene og indstillingerne. | Kompakt tekst | Ordrig 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
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.
Relaterede konverteringspar for JSON
Konvertering af JSON-data til HTML-kilde forvandler rå strukturerede nøgle-værdi-par til menneskelæsbare webdokumenter, der er klar til browsergengivelse.
Konvertering af HTML-kilde til JSON-data omsætter læsbare webdokumenter til strukturerede nøgle-værdi-par, der kan behandles af programmer og bruges i API’er.
Konvertering af et SQL Dump-tekstscript til en JSON-dataeksport omdanner stive relationelle databasetabeller til fleksible, indlejrede objekter til moderne webapplikationer.
Omdannelse af ustrukturerede JSON-tekstfiler til strukturerede relationelle SQLite-databaser giver mulighed for hurtig indeksering og forespørgsel på store dataposter.
Konvertering af Adobe Swatch Exchange-filer til farve-JSON-strukturer omdanner binære designpaletter til læsbare tekstobjekter til moderne webapplikationer.
Konvertering af farve-JSON-tekstdata til binære Adobe ASE-farveprøver bygger bro mellem webbaserede designtokens og professionelle layoutapplikationer til stationære computere.
Konvertering af GIMP Palette-tekstfiler til farve-JSON-strukturer gør det muligt for webapplikationer at læse farveprøver direkte uden komplekse fortolkningsscripts.
Konvertering af strukturerede farve-JSON-filer til CSS-variabler omdanner rå dataobjekter til indbyggede stilegenskaber til websteder.