Command Palette

Search for a command to run...

JSON Sorter: Sorteer JSON-sleutels alfabetisch voor schone, diff-vriendelijke bestanden

JSON Sorter: Sorteer JSON-sleutels alfabetisch voor schone, diff-vriendelijke bestanden

T
Toolz Team
|Aug 23, 2026|16 min lezen

Onderdeel van de collectie Datatools

Het pull verzoek had 240 gewijzigde lijnen en ik had precies twee waarden aangeraakt Dat was het moment dat ik serieus werd over het sorteren van JSON sleutels Een teamgenoot had een config bestand door een formatter gehaald die zijn toetsen opnieuw had geordend, ik had twee van die waarden met de hand bewerkt, en het resulterende diff was een onleesbare muur van rood en groen waar 238 van de regels toetsen waren die gewoon waren verplaatst Mijn recensent vroeg me begrijpelijkerwijs om het opnieuw te doen De echte veranderingen waren onzichtbaar binnenin de ruis.

Ik run [Toolz.dev] (/en bouw ook Laravel en WordPress projecten, wat betekent dat ik binnen woon package.json, composer.json, tsconfig.json, vertaalcatalogi, en honderd andere JSON-bestanden die zich inzetten voor versiebeheer Een JSON-bestand met onvoorspelbare sleutelvolgorde is een kleine, terugkerende belasting op elk van deze Sorteersleutels in een stabiele alfabetische volgorde is de oplossing, en het is een van die veranderingen die er cosmetisch uitziet tot de eerste keer dat het u een verspilde codebeoordeling bespaart Deze gids behandelt wanneer u JSON-sleutels moet sorteren, wanneer niet, en hoe u dit kunt doen zonder iets te breken.

tl;dr: Een JSON-sorteerder herschikt een object' s-toetsen in alfabetische volgorde en serialiseert het resultaat. De sleutelvolgorde verandert niet wat JSON betekent, omdat objecten ongeordend zijn volgens de JSON-standaard, maar een consistente volgorde maakt bestanden leesbaar en produceert schone versiebeheerdiffs die alleen gewijzigde waarden weergeven. Sorteer recursief om geneste objecten te bereiken, houd standaard de arrayvolgorde bij omdat arrays zijn geordend en kies voor oplopende of dalende, mooie of verkleinde uitvoer. De json-sorteerder draait volledig in uw browser.

Wat is een JSON-sorteerder?

Een JSON-sorteerder neemt een JSON-object en herschikt de toetsen in alfabetische volgorde, en schrijft het object vervolgens weer uit De waarden zijn onaangeroerd Alleen de volgorde waarin de toetsen verschijnen verandert, en dat is veilig omdat RFC 8259 definieert een object als een ongeordende verzameling: het opnieuw ordenen van sleutels kan niet veranderen wat het document betekent Dus {"name":"toolz","author":"Liton"} HALD {"author":"Liton","name":"toolz"}. Standaard is de sortering recursief, wat betekent dat de sleutels in elk genest object ook worden gesorteerd, helemaal tot op het diepste niveau.

Dat is de hele operatie, en de eenvoud ervan is het punt Je transformeert geen data, valideert geen schema, of converteert een formaat Je legt een voorspelbare volgorde op aan iets dat een willekeurige had Elk ander voordeel, leesbaarheid, vergelijkbaarheid, schone diffs, vloeit voort uit die ene voorspelbare ordening.

Verandert het sorteren van sleutels wat mijn JSON betekent?

Nee, en dit is het feit dat sorteren veilig maakt In de JSON-standaard, ECMA-404, wordt een object gedefinieerd als een ongeordende verzameling naam - en waardeparen De specificatie is expliciet dat de volgorde van die paren niet significant is Elke conforme parser leest {"a":1,"b":2} en {"b":2,"a":1} als exact dezelfde gegevens Wanneer uw programma dat doet config.timeout of data["name"], het zoekt de sleutel op bij naam; het maakt nooit uit waar in het object die sleutel is geschreven.

Er is één voorbehoud dat de moeite waard is om duidelijk te vermelden, omdat iemand altijd vraagt Een klein aantal systemen maakt misbruik van JSON-objecten alsof ze zijn besteld, waarbij ze vertrouwen op de invoegvolgorde voor weergave of verwerking. Dat is eerder misbruik van het formaat dan een eigenschap ervan, maar als u een systeem dat u niet beheert, test voordat u een gesorteerd bestand in een pijplijn plaatst, kunt u niet inspecteren. Voor de overgrote meerderheid van de echte JSON zijn configuratiebestanden, API-payloads, vergrendelbestanden, vertaalcatalogi en sorteersleutels een puur representatieve verandering zonder effect op de betekenis.

Arrays zijn het tegenovergestelde geval, en het onderscheid is belangrijk Een JSON-array is per definitie geordend, en de volgorde ervan heeft vaak betekenis: een reeks stappen, een gerangschikte lijst, een reeks coördinaten waarbij positie één de lengtegraad is en positie twee de breedtegraad. Het opnieuw ordenen van een array kan in stilte veranderen wat de gegevens zeggen. Daarom behoudt deze tool standaard de arrayvolgorde en sorteert alleen arrays als je er expliciet om vraagt, en zelfs dan alleen voor arrays waarvan de elementen allemaal strings of alle getallen zijn.

Waarom zou ik JSON-sleutels sorteren?

De hoofdreden is clean diffs, en het is degene die de manier waarop ik werk heeft veranderd Versie-control tools vergelijken bestanden regel voor regel Wanneer twee bestanden die dezelfde gegevens vertegenwoordigen hun sleutels in verschillende volgorde schrijven, zit het diff vol met sleutels die zijn verplaatst in plaats van waarden die zijn veranderd. Neem een regel aan dat elk JSON-bestand met gesorteerde sleutels is geschreven, en het probleem verdwijnt: twee versies van het bestand verschillen alleen als een waarde daadwerkelijk verschilt, dus een recensent ziet de echte verandering onmiddellijk. Dit is precies de reden waarom veel linters en formatters een sort-key-optie aanbieden, en waarom tools zoals jq verzend een sort-keys vlag.

De tweede reden is menselijke leesbaarheid Wanneer u een groot configuratiebestand scant op zoek naar een specifieke instelling, geeft alfabetische volgorde aan waar u moet zoeken U leest niet het hele bestand; u springt naar ruwweg waar de sleutel zou moeten zijn, zoals u dat in een woordenboek zou doen Op een bestand met tachtig toetsen is dat het verschil tussen een opzoeking van twee seconden en een volledige scan.

De derde reden is vergelijkbaarheid tussen bestanden Als uw project tien JSON-bestanden heeft die allemaal een gemeenschappelijke structuur moeten delen, maakt het op dezelfde manier sorteren ervan het triviaal om te bekijken of iemand een sleutel mist of een extra sleutel heeft. Divergences staan naast elkaar in plaats van zich in verschillende posities te verstoppen.

De vierde reden is canonicalisatie. Sommige workflows hebben een stabiele, deterministische weergave van een JSON-waarde nodig, bijvoorbeeld om deze te hashen, in de cache op te slaan of twee payloads te vergelijken voor gelijkheid, ongeacht hoe ze in series zijn geplaatst. Het sorteren van sleutels is een stap in de richting van een canonieke vorm, hoewel een volledige canonieke JSON ook de witruimte- en getalopmaak normaliseert.

Hoe gebruik ik de JSON Sorter?

Plak uw JSON in het invoervak op de json-sorteerder, of laad het monster om de vorm van de uitvoer te zien De invoer moet geldig zijn JSON Als dit niet het geval is, rapporteert het gereedschap de ontleedfout met zijn positie, zodat u een verdwaalde komma of een niet-gesloten beugel kunt repareren voordat u gaat sorteren.

Kies vervolgens hoe de sortering loopt Kies oplopend, dat is A tot Z, of aflopend voor Z tot A. Bepaal of u de behuizing wilt vouwen, die standaard aan staat, zodat Name, name, en NAME ga bij elkaar zitten in plaats van gescheiden te zijn, want hoofdletters sorteren vóór kleine letters in ruwe tekenvolgorde Kies of je afdaalt in geneste objecten, wat je bijna altijd wilt, of alleen het bovenste niveau sorteert Als je ook reeksen tekenreeksen of getallen wilt bestellen, schakel dan array-sortering in; gemengde arrays en arrays van objecten blijven altijd zoals ze zijn.

Kies ten slotte uw uitvoerstijl Pretty-print met inspringing met twee spaties, vier spaties of tabbladen voor een leesbaar bestand dat u vastlegt, of minify naar een enkele regel voor de kleinste payload voor opslag of transport Voer de sortering uit en kopieer het resultaat of download het. Het aantal sleutels vertelt u hoeveel sleutels opnieuw zijn besteld, wat een snelle controle op uw gezond verstand is dat het gereedschap de structuur heeft gezien die u had verwacht.

Oplopend, dalend, recursief: welke instellingen wil ik?

Meestal zijn de standaardinstellingen wat je wilt: oplopend, recursief, hoofdletterongevoelig, mooi afgedrukt met twee spaties Dat levert het leesbare, diff-vriendelijke bestand op dat überhaupt het sorteren motiveert De andere instellingen bestaan voor specifieke situaties, en de onderstaande tabel is hoe ik beslis.

Instelling Standaard Wanneer het te veranderen
Bestellen Oplopend (A tot Z) Afdalen is zeldzaam; handig als u de meest recente of hoogste prioriteitssleutels, genoemd om als laatste te sorteren, bovenaan wilt hebben
Recursief On Schakel alleen uit als u secties op het hoogste niveau opnieuw wilt ordenen, maar behoud de met de hand afgestemde volgorde in elke sectie
Zaak negeren On Schakel uit wanneer u een strikte codepuntvolgorde nodig heeft, bijvoorbeeld om te matchen met een ander hulpmiddel dat hoofdlettergevoelig sorteert
Arrays sorteren Off Schakel arrays in die echt ongeordende sets zijn, zoals een lijst met tags of toegestane waarden
Mooie print On Schakel uit om te minifiëren voor transport of opslag

De enige instelling die mensen misbruiken is array sorteren Schakel het alleen in als u zeker weet dat een array een ongeordende set vertegenwoordigt Een lijst met tags, een reeks toegestane bestandsextensies of een zak met featurevlaggen is veilig om te sorteren Een lijst met pijplijnstappen, een routetabel of iets waar positie sequentie impliceert is dat niet. Laat arrays bij twijfel met rust, want de tool' De standaardwaarde voor het bewaren van de volgorde kan uw gegevens nooit beschadigen, terwijl het sorteren van de verkeerde array in stilte wel kan.

Hoe past dit bij andere JSON tools?

Sorteren is meestal een stap in een kleine keten Wanneer JSON wordt geminifieerd en onleesbaar uit een API, ik voer het door de JSON-formatter eerst inspringen en valideren, dan sorteren de sleutels om het scanbaar te maken Als ik een lading klaarmaak voor transport na het sorteren, de JSON-minifier strip het terug naar een enkele regel, en omdat de sleutels al gesorteerd zijn, komen twee geminificeerde payloads die dezelfde gegevens vertegenwoordigen byte-voor-byte identiek uit, wat handig is voor caching en vergelijking.

Voor structureel werk in plaats van presentatie is de JSON flattener verandert geneste objecten in gestippelde toetsen en terug, wat op natuurlijke wijze gepaard gaat met sorteren wanneer u config in omgevingsvariabelen verwart. En wanneer u de gegevens volledig in een ander formaat nodig heeft, is de JSON naar YAML-converter is de volgende stop; het sorteren van sleutels voordat u converteert, geeft u ook een YAML-bestand met een voorspelbare, leesbare veldvolgorde. Als u een groter beeld wilt van hoe deze in elkaar passen, heb ik mijn volledige set-up in de Handleiding voor webontwikkelaars, en de diepere mechanismen van formatteren leven in de JSON-formattergids.

Een echt voorbeeld: een package.json diff temmen

Laat me even door de exacte situatie lopen waarmee dit artikel is begonnen, want het laat zien waarom de instellingskeuzes ertoe doen Ik had een package.json waar de dependencies block was in installatievolgorde geschreven, ongeveer de volgorde waarin pakketten in twee jaar tijd waren toegevoegd. Een nieuw teamlid draaide hun editor ' s-formaat-op-op-opslaan, waarmee de afhankelijkheidssleutels werden gesorteerd en deze samen met een echte verandering werden doorgevoerd: één pakket van versie 4 naar versie 5 stoten.

Het diff was een ramp Elke afhankelijkheid onder de gestoten leek te zijn verplaatst, omdat sorteren hun posities had verschoven, dus de recensent zag dertig gewijzigde regels voor wat een upgrade van één regel was De oplossing was niet om ruzie te maken over wiens editor gelijk had De oplossing was om het bestand een keer te sorteren, dat soort als zijn eigen afzonderlijke wijziging te plegen met een bericht als "sort package.json keys, & quot; en vervolgens de versie bovenop de nu stabiele volgorde te laten stoten Daarna produceerde elke toekomstige afhankelijkheidsverandering een schoon diff van één of twee regels, omdat het bestand al in de volgorde zat iedereen ' de tools wilden het erin zetten.

Dat is het patroon dat ik nu volg voor elke JSON die in versiebeheer leeft Eenmaal sorteren in een dedicated commit, dan gesorteerd houden De json-sorteerder met zijn standaardwaarden, oplopend en recursief, produceert precies de volgorde die Prettier's sorteeroptie en jq --sort-keys produceren, zodat het bestand stabiel blijft, ongeacht welk gereedschap een teamgenoot toevallig uitvoert Het enige dat ik als eerste controleer zijn arrays: package.json heeft geen betekenisvolle arrays om je zorgen over te maken, maar een bestand met een geordende array zoals een lijst met bouwstappen moet array-sortering achterwege laten, wat de standaard is, dus de reeks overleeft.

Welke tools en formaten sorteren JSON-sleutels?

Het sorteren van JSON-sleutels is een voldoende algemene behoefte om in het hele ecosysteem te verschijnen, wat een goed teken is dat de praktijk eerder gezond is dan een persoonlijke eigenaardigheid. De opdrachtregelprocessor jq heeft een --sort-keys vlag, vaak geschreven -S, dat sorteert de sleutels van elk object in zijn uitvoer De Prettier code formatter kan sleutels in JSON sorteren door zijn configuratie Veel linters bieden een sort-key regel die ongesorteerde objecten in broncode vlaggen Taal standaard bibliotheken leggen dezelfde mogelijkheid bloot, bijvoorbeeld Python' s json.dumps accepteert a sort_keys=True argument dat canonieke, gesorteerde uitvoer oplevert.

Wat een browsergebaseerde sorteerder toevoegt is de snelle, niet-ingestelde case Wanneer u een blob van JSON hebt uit een API-antwoord, een loglijn of een Slack-bericht, en u wilt het gewoon op dit moment in een gezonde volgorde lezen, is het openen van een pagina en plakken sneller dan het bedraden van een formatter of het laten vallen in een shell. Het is dezelfde reden waarom er naast editorplug-ins een paste-and-go-formatter bestaat: de tool voldoet aan de ad-hocbehoefte die de geconfigureerde pijplijn niet dekt.

Is mijn JSON privé?

Ja. de JSON wordt geparseerd, gesorteerd, en volledig opnieuw geserialiseerd in uw browser met behulp van JavaScript Niets wordt geüpload naar een server, gelogd, of ergens opgeslagen Dat is niet een klein detail voor JSON specifiek, omdat JSON is waar geheimen leven: API-reacties die tokens dragen, config bestanden met verbindingsreeksen, payloads die klantrecords bevatten Het plakken van een van die in een tool die het naar een server verzendt is een reëel risico, en het is precies het risico dat deze tool is gebouwd om te vermijden.

U kunt de claim op dezelfde manier verifiëren als ik. Open het netwerktabblad in uw browser' s ontwikkelaarstools en bekijk het terwijl u sorteert; geen enkel verzoek verlaat de pagina Of maak de verbinding met internet los en blijf sorteren, want zodra de pagina is geladen, werkt de tool helemaal zonder verbinding. De verwerking aan de clientzijde is de standaard voor alles wat ik bouw, en als u zich zorgen maakt over het bredere argument ervoor, de Gids voor gegevensprivacy maakt de zaak volledig.

Veelgestelde vragen

Wat betekent het om JSON-sleutels te sorteren?

Sorteren van JSON-toetsen herschikt de naam-waardeparen van een object in alfabetische volgorde zonder enige waarden te wijzigen Het object {"name":"toolz","author":"Liton"} wordt {"author":"Liton","name":"toolz"}. Alleen de volgorde van de toetsen verandert, dus de gegevens die het document vertegenwoordigt blijven exact hetzelfde.

Verandert het sorteren van sleutels wat mijn JSON betekent?

heel weinig . In de JSON-standaard, ECMA-404, is een object een ongeordende set naam-waarde-paren, dus het opnieuw ordenen van de sleutels verandert de betekenis niet. Elke conforme parser leest de gesorteerde en ongesorteerde versies als dezelfde gegevens. De volgorde is alleen van belang voor de menselijke leesbaarheid en voor het produceren van stabiele diffs.

Zijn geneste objecten ook gesorteerd?

Ja, standaard. Recursieve sortering is ingeschakeld, dus de sleutels van elk object in het document worden gesorteerd, op elk niveau van nesten. U kunt de recursie uitschakelen om alleen de toetsen op het hoogste niveau te sorteren en geneste objecten in hun oorspronkelijke volgorde achter te laten.

ordert de sorteerder arrays?

niet standaard. Arrays worden per definitie geordend en het opnieuw ordenen ervan kan de betekenis veranderen, zodat de tool de arrayvolgorde behoudt. Er is een optie om arrays te sorteren waarvan de elementen allemaal tekenreeksen of alle getallen zijn wanneer u ze wilt bestellen; arrays die typen mixen of objecten bevatten, blijven altijd zoals ze zijn.

Waarom zou ik JSON-sleutels sorteren?

De meest voorkomende reden is stabiele verschillen: wanneer elk bestand zijn sleutels in dezelfde alfabetische volgorde schrijft, markeren versie-controle-diffs alleen de waarden die zijn veranderd in plaats van sleutels die zijn verplaatst. Sorteren maakt ook grote configuratiebestanden en API-antwoorden veel gemakkelijker te scannen en met oog te vergelijken.

Hoe werkt case-ongevoelig sorteren?

Met hoofdlettergevoelige sortering aan, worden sleutels vergeleken alsof ze in kleine letters zitten, dus naam, naam en naam worden naast elkaar gegroepeerd in plaats van gescheiden te worden, omdat hoofdletters sorteren voor kleine letters in raw tekenvolgorde. Schakel het uit om strikt te sorteren op tekencodepunt.

Kan ik de gesorteerde JSON verkleinen?

Ja. Kies geminifieerde uitvoer om de gesorteerde JSON op een enkele regel te krijgen zonder extra witruimte, wat de kleinste vorm is voor opslag of transport. Kies voor een leesbaar bestand in plaats daarvan mooie uitvoer met twee ruimte, vier ruimte of tab-inspringing.

Is mijn json ergens geüpload?

heel weinig . De JSON wordt geparseerd en gesorteerd op JavaScript in uw browser en wordt nooit verzonden, gelogd of opgeslagen. U kunt dit verifiëren door het tabblad Netwerk te bekijken tijdens het sorteren, of door offline te gaan, de tool blijft werken zonder verbinding.


Geschreven door Liton, bouwer van [Toolz.dev] (/. Ik bouw browsergebaseerde ontwikkelaarstools en schrijf over het werken met JSON, Laravel en het web.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!