Wat formatteren verandert
De uitvoer is een nieuwe serialisatie, geen herdruk. Alles wat JSON.parse niet bewaart, is weg.
- Getallen worden genormaliseerd.
1.0,1e0en1komen allemaal terug als1, en-0komt terug als0. - 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": 2wordt geformatteerd tot één"a": 2. - Gehele getallen boven 253−1 verliezen precisie.
JSON.parsemaakt IEEE-754 doubles, dus9007199254740993komt terug als9007199254740992. Voor 64-bits identifiers (snowflakes, Postgresbigintsleutels) 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
Zkomt voora. 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.jsonen 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-Filevan PowerShell, ouder Kladblok en sommige Java-tooling beginnen met U+FEFF, enJSON.parseweigert 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.