Naar de inhoud
HexSlate

JSON Formatter & Validator

JSON-invoer0 B / 5 MB

Nog niets om te formatteren

Plak JSON in het vak. Het wordt geparsed terwijl je typt.

verwerkt in 0,1 msregels 0 → 00 B uit

Wat formatteren verandert

De uitvoer is een nieuwe serialisatie, geen herdruk. Alles wat JSON.parse niet bewaart, is weg.

  • Getallen worden genormaliseerd.1.0, 1e0 en 1 komen allemaal terug als 1, en -0 komt terug als 0.
  • Dubbele namen vallen samen. RFC 8259 §4 zegt dat namen uniek zouden moeten zijn (SHOULD) en laat de rest ongedefinieerd; JavaScript lost het op met laatste wint, dus "a": 1, "a": 2 wordt geformatteerd tot één "a": 2.
  • Gehele getallen boven 253−1 verliezen precisie.JSON.parse maakt IEEE-754 doubles, dus 9007199254740993 komt terug als 9007199254740992. Voor 64-bits identifiers (snowflakes, Postgres bigint sleutels) is deze tool een viewer en geen garantie dat je de waarde ongeschonden terugkrijgt.
  • Witruimte en de oorspronkelijke sleutelvolgorde blijven niet bewaard. Sorteren gaat op UTF-16 code-eenheid, dus Z komt voor a. Arrays worden nooit herordend, want de volgorde van een array is data.

Waar de foutregel en kolom vandaan komen

Ze worden uit de invoer berekend, niet overgenomen uit de foutmelding van de browser, want de engines zijn het oneens. V8 (Chrome, Edge, Node) zegt at position 24 en laat de positie bij korte invoer helemaal weg. SpiderMonkey (Firefox) zegt at line 2 column 9 of the JSON-data. JavaScriptCore (Safari) geeft helemaal geen positie. Waar een engine er wel een meldt, wordt die herrekend naar een regel en kolom die overal hetzelfde lezen. Waar geen enkele dat doet, valt de aanwijzer terug op de eerste herkenbare aanwijzing in de invoer, en die kan dus ergens anders landen dan een andere browser hem zet.

Veelvoorkomende problemen

  • Komma te veel: {"a": 1,}. Toegestaan in JavaScript, verboden in JSON. Gebruik de stripknop, of haal de komma weg.
  • Commentaar: tsconfig.json, devcontainer.json en de instellingen van VS Code zijn JSONC, geen JSON. Het strippen kijkt naar strings, dus een // binnen "https://example.com" blijft staan.
  • Enkele aanhalingstekens of namen zonder aanhalingstekens: dat is een JavaScript-objectliteral of JSON5. Elke naam en elke string in JSON staat tussen dubbele aanhalingstekens.
  • NaN, Infinity, undefined: JSON heeft voor geen van drieën een literal (RFC 8259 §6). Gebruik null, of een string.
  • Een byte-order mark vooraan: bestanden uit Out-File van PowerShell, ouder Kladblok en sommige Java-tooling beginnen met U+FEFF, en JSON.parse weigert dat op positie 0. Hier wordt het voor het parsen weggehaald.

Veelgestelde vragen

Waarom is mijn lange getal veranderd?

JSON-getallen worden JavaScript doubles, en die houden 53 bits aan gehele precisie vast, dus alles boven 9.007.199.254.740.991 wordt afgerond. Elke JSON-tool die op JavaScript draait doet dit. Stuur exacte 64-bits getallen als string.

Kan het JSONC of JSON5 formatteren?

JSONC wel. De enkele aanhalingstekens, namen zonder aanhalingstekens en hexgetallen van JSON5 worden gemeld in plaats van herschreven, want herschrijven betekent raden wat je bedoelde.

Valideert het tegen een JSON Schema?

Nee. Dit controleert de syntaxis. Schemavalidatie controleert of geldige JSON voldoet aan een contract van verplichte properties, types en formats.

Wordt mijn JSON ergens heen gestuurd?

Nee. Parsen en formatteren gebeuren allebei in dit tabblad, en er komt ook niets in de adresbalk. Wat mensen in een formatter plakken is heel vaak een API-response met een token of persoonsgegevens erin.