Naar de inhoud
Quaestio

JSON opmaken

Plak JSON, dan wordt het opnieuw opgemaakt of tot één enkele regel samengeperst.

Resultaat

Plak JSON in het veld hierboven.
Insluiten

Deze tool op je eigen site insluiten

Kopieer de code en plak die waar de tool moet verschijnen, bijvoorbeeld in een blogbericht of op een schoolpagina. Het is gratis, het kader heeft geen advertenties en de tool rekent in de browser van de bezoeker.

Zo werkt het

JSON is een tekstformaat voor gestructureerde gegevens, opgebouwd uit objecten met benoemde velden, lijsten, tekenreeksen, getallen, waar, onwaar en leeg.

Het opmaken verandert alleen de witruimte. De gegevens zijn ervoor en erna dezelfde, dus je kunt een bestand gerust opnieuw opmaken voordat je het leest.

Het comprimeren haalt alle overbodige spaties en regelovergangen weg, wat de omvang van ingesprongen JSON meestal met twintig tot dertig procent verkleint.

Is de tekst niet te ontleden, dan verschijnt de foutmelding van de parser van de browser zelf, die meestal laat zien welk teken onverwacht was. Het vaakst komen een komma te veel vóór een sluithaakje en aanhalingstekens van de verkeerde soort voor.

Commentaar is in JSON niet toegestaan, en veldnamen moeten tussen rechte dubbele aanhalingstekens staan. Dat is het meest voorkomende verschil met hoe objecten in JavaScript worden geschreven.

Zo maakt de tool op

De tool doet twee dingen na elkaar. Eerst gaat de tekst door JSON.parse van de browser, maar alleen om te zien of hij geldig is. Het opmaken zelf loopt daarna teken voor teken door je eigen tekst: witruimte buiten tekenreeksen wordt verwijderd, en na accolades, vierkante haken en komma’s komen regelovergangen en inspringingen van twee of vier spaties. Lege objecten en lijsten worden aaneengeschreven. Tekenreeksen worden onaangeroerd overgenomen, met hun escapereeksen. Comprimeren is dezelfde doorloop zonder regelovergangen en inspringingen.

Getallen blijven staan

JSON in JavaScript inlezen en weer uitschrijven kan de getallen veranderen, omdat JavaScript één getaltype heeft met beperkte precisie. Geprobeerd met de code van de tool wordt het gehele getal 12345678901234567890 dan 12345678901234567000, het getal 1.0 wordt 1 en 1e400 wordt null. In de tool blijven alle drie precies staan zoals ze geschreven zijn. RFC 8259 noemt alleen gehele getallen tot en met 2⁵³ − 1, dat is 9.007.199.254.740.991, veilig tussen systemen, en I-JSON (RFC 7493) raadt aan exacte getallen die groter zijn als tekenreeks te versturen.

Dubbele namen

Een object met twee keer dezelfde naam komt door de controle. RFC 8259 zegt alleen dat namen uniek zouden moeten zijn, en dat onvoorspelbaar is wat een ontvanger met dubbele namen doet; veel parsers houden alleen de laatste waarde. De tool houdt ze allebei, dus de dubbele naam is in het resultaat te zien. Een omweg via JavaScript had de eerste waarde stilletjes laten verdwijnen. I-JSON verbiedt dubbele namen helemaal.

Veelgemaakte fouten

Een tab of een regelovergang binnen een tekenreeks maakt de tekst ongeldig, omdat RFC 8259 eist dat de stuurtekens U+0000–U+001F met een escape worden geschreven, zoals \t voor een tab. Dat gebeurt makkelijk als je tekst uit een spreadsheet plakt. NaN en Infinity, die in JavaScript bestaan maar niet in JSON, worden ook afgewezen, en net zo een byte order mark aan het begin, hoewel RFC 8259 parsers toestaat die te negeren.

Bronnen

Zo worden de tools gecontroleerd