JSON-gegevens (.json)
RFC StandaardJavaScript Object Notation (JSON) is een lichtgewicht, door mensen leesbaar tekstformaat voor gegevensuitwisseling, ondersteund door vele programmeertalen en vaak gebruikt in web-API's.
JSON naar HTML converteren
Gratis JSON-naar-HTML-converter in uw browser. Converteer bestanden direct op uw apparaat.
JSON online comprimeren
Privé - bestanden verlaten uw apparaat niet
Inspecteren en metadata
Besturingssystemen en bestandsanalysators herkennen JSON-bestanden aan de hand van de eerste binaire bytesequentie:
Bestandshandtekening op byteniveau (magic bytes)
Besturingssystemen en bestandsanalysators herkennen JSON-bestanden aan de hand van de eerste binaire bytesequentie:
HEX-HANDTEKENING (OFFSET 0):
7B of 5BASCII-WEERGAVE: { of [
Standaardisatie: RFC 8259 / ECMA-404 / ISO/IEC 21778
Technische specificaties
| Containerarchitectuur | Lichtgewicht, op tekst gebaseerd, taalonafhankelijk gegevensuitwisselingsformaat |
| Compressie | Gzip, Brotli en Zstandard kunnen JSON-tekst comprimeren; de resulterende grootte hangt af van de gegevens en instellingen |
| Bytevolgorde (endianness) | UTF-8-gecodeerde Unicode (een Byte Order Mark (BOM) wordt afgeraden) |
| Kleurruimten | Niet van toepassing |
| Kanalen en structuur | Zes basistypen: object, array, string, getal, boolean, null |
| Maximale afmetingen | Onbeperkt; alleen beperkt door het geheugen van de parser en de maximale tekenreekslengte |
| Transparantie | Niet van toepassing |
| Streaming en progressief | NDJSON (Newline Delimited JSON) / JSON Lines maakt progressieve streamverwerking mogelijk |
Technische vergelijkingsmatrix: JSON versus concurrenten
| Technisch kenmerk | JSON (Huidig) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Syntaxiscomplexiteit | Minimaal (6 typen, strikte syntaxis) | Hoog (gebaseerd op inspringing, complexe specificatie) | Hoog (uitgebreide sluitende tags, naamruimten) | Via schema gedefinieerd binair transportformaat |
| Parsingprestaties | Extreem snel in alle moderne talen | Traag (complexe inspringingsparsing) | Matig tot traag (zware DOM-constructie) | Ultrasnel (zero-copy binaire deserialisatie) |
| Ondersteuning voor opmerkingen | Nee (bewust weggelaten om wildgroei van metadata te voorkomen) | Ja (# opmerkingen) | Ja (<!-- opmerkingen -->) | Ja in .proto-bestanden |
| Grootte van netwerkpayload | Compacte tekst; compressieresultaten hangen af van de gegevens en instellingen | Compacte tekst | Uitgebreide tekst (veel herhaling van tags) | Ultracompact binair |
Veelvoorkomende beschadigingen en gids voor hex-herstel
SyntaxError: Unexpected token , in JSON at position X.
Oorzaak: Een afsluitende komma na het laatste item in een array of object, wat volgens RFC 8259 strikt verboden is.
Herstel: Verwijder afsluitende komma's bij objecteigenschappen en array-items voordat u deze doorgeeft aan JSON.parse().
SyntaxError: Unexpected token ' in JSON.
Oorzaak: Strings of sleutels omsloten door enkele aanhalingstekens ('') in plaats van dubbele aanhalingstekens ("").
Herstel: Vervang alle strings en sleutels met enkele aanhalingstekens door standaard strings met dubbele aanhalingstekens.
Beveiligingsanalyse en aanvalsvectoren voor parsers
JSON is alleen tekst en veilig tegen directe code-uitvoering, maar het parsen van niet-vertrouwde JSON kan leiden tot Prototype Pollution, ReDoS of geheugenuitputting.
Bekende aanvalsvectoren
- Prototype Pollution: sleutels met de naam '__proto__' of 'constructor' die Object.prototype wijzigen in JavaScript-applicaties.
- Denial-of-serviceaanval door stackoverloop via diep geneste JSON-structuren (bijvoorbeeld 10.000 openingshaken).
- Verlies van numerieke precisie: JavaScript-getallen groter dan 2^53 - 1 (9.007.199.254.740.991) verliezen stilletjes precisie.
Aanbevolen beveiligingspraktijken: Evalueer JSON nooit met eval(). Gebruik JSON.parse() en neutraliseer '__proto__'-eigenschappen in recursieve functies voor het samenvoegen van objecten.
Historische oorsprong en mijlpalen
Belangrijkste voordelen
- Door mensen leesbare, zelfbeschrijvende en beknopte tekststructuur.
- Ingebouwde ondersteuning voor native parsing in JavaScript-engines (JSON.parse) en elke belangrijke programmeertaal.
- Strikte specificatie voorkomt willekeurige code-uitvoering.
Technische beperkingen
- Geen ondersteuning voor opmerkingen, afsluitende komma's of circulaire objectreferenties.
- Geen native binaire typen (binaire data moet base64-gecodeerd zijn, wat de grootte met 33% vergroot).
- Inefficiënte serialisatie vergeleken met binaire formaten zoals Protocol Buffers of MessagePack.
Interessante technische weetjes
- Douglas Crockford voegde de softwarelicentieclausule 'The Software shall be used for Good, not Evil' toe aan de originele JSMin JSON-tools.
- JSON is een strikte subset van de JavaScript-syntaxis, maar tot ES2019 waren onbewerkte, niet-geëscapete U+2028- en U+2029-tekens geldig in JSON maar ongeldig in JavaScript-strings.
- Douglas Crockford ontdekte dat vroege webbrowsers JSON direct konden evalueren naar objecten met behulp van de native eval() van JavaScript voordat speciale JSON.parse()-API's werden gestandaardiseerd in ECMAScript 5.
Veelgestelde technische vragen
Waarom staat JSON geen opmerkingen toe?
JSON sluit opmerkingen uit van de grammatica. Implementaties kunnen verschillen in hoe ze omgaan met extensies en applicatiespecifieke data, dus het formaat alleen garandeert geen onderlinge compatibiliteit.
Hoe slaat u 64-bits gehele getallen op in JSON zonder precisieverlies?
Het ingebouwde Number-type van JavaScript is een IEEE 754-getal met dubbele precisie en drijvende komma. Het ondersteunt alleen gehele getallen tot 2^53 - 1 nauwkeurig. 64-bits gehele getallen (zoals database-ID's of tijdstempels) moeten in JSON als tekenreeksen worden geserialiseerd (bijvoorbeeld '1234567890123456789').
Wat is het verschil tussen JSON en NDJSON / JSON Lines?
Standaard-JSON verpakt de volledige payload in één hoofdobject of -array, waardoor parsers de hele tekst moeten laden voordat ze deze evalueren. NDJSON (Newline Delimited JSON) scheidt afzonderlijke geldige JSON-records met regeleinden (\n), wat geheugenefficiënte streaming regel voor regel van enorme datasets van meerdere gigabytes mogelijk maakt.
Gerelateerde conversieparen voor JSON
Het converteren van JSON-data naar HTML-broncode transformeert ruwe gestructureerde sleutel-waardeparen in leesbare webdocumenten die klaar zijn voor browserrendering.
Het omzetten van een HTML-bronbestand naar JSON-gegevens transformeert door mensen leesbare webdocumenten in gestructureerde sleutel-waardeparen voor programmatische verwerking en API-invoer.
Het converteren van een SQL-dumptekstscript naar een JSON-data-export zet starre relationele databasetabellen om in flexibele, geneste objecten voor moderne webapps.
Het omzetten van ongestructureerde JSON-tekstbestanden naar gestructureerde relationele SQLite-databases maakt het mogelijk om grote gegevensrecords snel te indexeren en te doorzoeken.
Het converteren van Adobe Swatch Exchange-bestanden naar Kleur-JSON-structuren transformeert binaire ontwerppaletten in leesbare tekstobjecten voor moderne webapplicaties.
Het converteren van Kleur-JSON-tekstgegevens naar binaire Adobe ASE-stalen overbrugt webgebaseerde ontwerptokens en professionele desktop-lay-outtoepassingen.
Het converteren van tekstbestanden met GIMP-paletten naar Kleur-JSON-structuren stelt webapplicaties in staat om kleurstalen rechtstreeks te lezen zonder complexe verwerkingsscripts.
Het converteren van gestructureerde Kleur-JSON-bestanden naar CSS-variabelen transformeert ruwe gegevensobjecten in native stijleigenschappen voor websites.