Command Palette

Search for a command to run...

JSON Sorter: ordina le chiavi JSON in ordine alfabetico per file puliti e diversi

JSON Sorter: ordina le chiavi JSON in ordine alfabetico per file puliti e diversi

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

Parte della raccolta Strumenti per i dati

La richiesta pull aveva 240 linee modificate e avevo toccato esattamente due valori Quello fu il momento in cui feci sul serio nell'ordinare i tasti JSON Un compagno di squadra aveva eseguito un file di configurazione attraverso un formattatore che ne riordinava i tasti, avevo modificato due di quei valori a mano, e il diff risultante era un muro illeggibile di rosso e verde dove 238 delle linee erano tasti che si erano semplicemente spostati Il mio recensore, comprensibilmente, mi chiese di rifarlo I veri cambiamenti erano invisibili all'interno del rumore.

Eseguo [Toolz.dev](/e costruisco anche progetti Laravel e WordPress, il che significa che vivo dentro package.json, composer.json, tsconfig.json, cataloghi di traduzione, e un centinaio di altri file JSON che si impegnano per il controllo della versione Un file JSON con ordine di chiave imprevedibile è una piccola tassa ricorrente su ognuno di questi Ordinamento delle chiavi in un ordine alfabetico stabile è la correzione, ed è uno di quei cambiamenti che sembra cosmetico fino alla prima volta che ti salva una recensione del codice sprecato Questa guida copre quando ordinare le chiavi JSON, quando non farlo, e come farlo senza rompere nulla.

tl; dr: Un selezionatore JSON riordina le chiavi di un oggetto's in ordine alfabetico e riserializza il risultato L'ordine delle chiavi non modifica ciò che JSON significa, perché gli oggetti non sono ordinati dallo standard JSON, ma un ordine coerente rende i file leggibili e produce diff puliti di controllo della versione che mostrano solo valori modificati Ordina ricorsivamente per raggiungere oggetti nidificati, mantieni l'ordine degli array per impostazione predefinita perché gli array sono ordinati e scegli l'output ascendente o discendente, grazioso o minificato. Il SORTER JSON funziona interamente nel tuo browser.

Che cosa è un selezionatore JSON?

Un selezionatore JSON prende un oggetto JSON e riorganizza le sue chiavi in ordine alfabetico, quindi riscrive l'oggetto. I valori non sono toccati. Cambia solo la sequenza in cui appaiono le chiavi, ed è sicuro perché RFC 8259 definisce un oggetto come una raccolta non ordinata: il riordino delle chiavi non può modificare il significato del documento Così {"name":"toolz","author":"Liton"} diventa {"author":"Liton","name":"toolz"}. Per impostazione predefinita l'ordinamento è ricorsivo, il che significa che anche le chiavi all'interno di ogni oggetto annidato sono ordinate, fino al livello più profondo.

Questa è l'intera operazione e la sua semplicità è il punto. Non stai trasformando i dati, convalidando uno schema o convertendo un formato. Stai imponendo un ordine prevedibile su qualcosa che ne aveva uno arbitrario. Ogni altro vantaggio, leggibilità, comparabilità, differenze pulite, fluisce da quell'unico ordinamento prevedibile.

L'ordinamento delle chiavi cambia il mio significato di JSON?

No, ed è questo il fatto che rende sicuro l'ordinamento Nello standard JSON, ECMA-404, un oggetto è definito come una raccolta non ordinata di coppie di nomi e valori, La specifica è esplicita che l'ordine di quelle coppie non è significativo Qualsiasi parser conforme legge {"a":1,"b":2} e {"b":2,"a":1} esattamente come gli stessi dati Quando il tuo programma fa config.timeout oppure data["name"], guarda la chiave per nome; non importa mai dove nell'oggetto è stata scritta quella chiave.

C'è un avvertimento che vale la pena affermare chiaramente, perché qualcuno chiede sempre Un numero minuscolo di sistemi abusano degli oggetti JSON come se fossero stati ordinati, basandosi sull'ordine di inserimento per la visualizzazione o l'elaborazione Si tratta di un uso improprio del formato piuttosto che di una sua proprietà, ma se si sta alimentando un sistema che non si controlla, testare prima di commettere un file ordinato in una pipeline che non è possibile ispezionare Per la stragrande maggioranza dei JSON del mondo reale, i file di configurazione, i payload API, i file di blocco, i cataloghi di traduzione, le chiavi di ordinamento è un cambiamento puramente presentazionale con effetto zero sul significato.

Gli array sono il caso opposto, e la distinzione conta Un array JSON è ordinato per definizione, e il suo ordine porta frequentemente significato: una sequenza di passi, una lista classificata, un insieme di coordinate dove la posizione uno è longitudine e la posizione due è latitudine Riordinare un array può cambiare silenziosamente ciò che i dati dicono Ecco perché questo strumento preserva l'ordine degli array per impostazione predefinita e ordina gli array solo quando glielo chiedi esplicitamente, e anche in questo caso solo per gli array i cui elementi sono tutte stringhe o tutti i numeri.

Perché dovrei ordinare le chiavi JSON?

Il motivo principale è clean diffs, ed è quello che ha cambiato il mio modo di lavorare Gli strumenti di controllo delle versioni confrontano i file riga per riga Quando due file che rappresentano gli stessi dati scrivono le loro chiavi in ordini diversi, il diff è pieno di chiavi che si sono spostate anziché di valori che sono cambiati Adotta una regola che ogni file JSON è scritto con chiavi ordinate, e il problema scompare: due versioni del file differiscono solo dove un valore effettivamente differisce, quindi un revisore vede immediatamente il vero cambiamento Questo è esattamente il motivo per cui molti linter e formattatori offrono un'opzione sort-keys, e perché strumenti come jq spedisci una bandiera con chiavi di sorta.

Il secondo motivo è la leggibilità umana Quando si sta scansionando un file di configurazione di grandi dimensioni alla ricerca di un'impostazione specifica, l'ordine alfabetico indica dove cercare Non si legge l'intero file; si salta all'incirca dove dovrebbe essere la chiave, come si farebbe in un dizionario Su un file con ottanta chiavi, cioè la differenza tra una ricerca di due secondi e una scansione completa.

Il terzo motivo è la comparabilità tra i file Se il tuo progetto ha dieci file JSON che dovrebbero tutti condividere una struttura comune, ordinarli tutti allo stesso modo rende banale osservare se manca una chiave o ne ha una in più Le divergenze si allineano una accanto all'altra invece di nascondersi in posizioni diverse.

Il quarto motivo è la canonicalizzazione Alcuni flussi di lavoro necessitano di una rappresentazione stabile e deterministica di un valore JSON, ad esempio per eseguirne l'hashing, memorizzarlo nella cache o confrontare due payload per l'uguaglianza indipendentemente da come sono stati serializzati L'ordinamento dei tasti è un passo verso una forma canonica, sebbene un JSON canonico completo normalizzi anche gli spazi bianchi e la formattazione dei numeri.

Come faccio a utilizzare il JSON Sorter?

Incolla il tuo JSON nella casella di input sul SORTER JSON, o caricare il campione per vedere la forma dell'uscita L'ingresso deve essere valido JSON Se non lo è, lo strumento segnala l'errore di analisi con la sua posizione in modo da poter fissare una virgola vagante o una parentesi non chiusa prima dell'ordinamento.

Quindi scegliere come viene eseguito l'ordinamento Scegli ascendente, che è da A a Z, o discendente per Z ad A. Decidi se piegare il caso, che è attivo per impostazione predefinita in modo che Name, name, e NAME sedetevi insieme piuttosto che essere separati perché le lettere maiuscole ordinano prima di quelle minuscole in ordine di caratteri grezzi Scegliete se scendere in oggetti nidificati, che quasi sempre desiderate, o ordinare solo il livello superiore Se volete array di stringhe o numeri ordinati pure, attivate l'ordinamento degli array; array misti e array di oggetti sono sempre lasciati così come sono.

Infine, scegli il tuo stile di output Pretty-print con rientro a due spazi, quattro spazi o scheda per un file leggibile che commetterai o minify su una singola riga per il più piccolo payload per l'archiviazione o il trasporto Esegui l'ordinamento, quindi copia il risultato o scaricalo Il conteggio dei tasti ti dice quante chiavi sono state riordinate, ovvero un rapido controllo di integrità che lo strumento ha visto la struttura che ti aspettavi.

Ascendente, discendente, ricorsivo: quali impostazioni voglio?

La maggior parte delle volte le impostazioni predefinite sono ciò che desideri: ascendente, ricorsiva, senza maiuscole e minuscole, abbastanza stampata con due spazi. Ciò produce il file leggibile e diff-friendly che motiva l'ordinamento in primo luogo. Le altre impostazioni esistono per situazioni specifiche e la tabella seguente è come decido.

Impostazione Default Quando cambiarlo
Ordine Ascendente (dalla A alla Z) Discendere è raro; utile quando si desidera che le chiavi più recenti o con la priorità più alta, denominate per ordinare per ultime, in alto
Ricorsivo Su Disattivare solo quando si desidera riordinare le sezioni di primo livello ma preservare l'ordine sintonizzato a mano all'interno di ciascuna di esse
Ignora caso Su Disattivare quando è necessario un rigoroso ordine del punto di codice, ad esempio per abbinare un altro strumento che ordina il caso in modo sensibile
Ordina array Fuori Attiva per gli array che sono set genuinamente non ordinati, come un elenco di tag o valori consentiti
Piuttosto stampa Su Spegnere per minificare per il trasporto o lo stoccaggio

L'unica impostazione di uso improprio delle persone è l'ordinamento dell'array Accendilo solo quando sei certo che un array rappresenta un insieme non ordinato Un elenco di tag, un insieme di estensioni di file consentite o un sacchetto di flag di funzionalità è sicuro da ordinare Un elenco di passaggi della pipeline, una tabella di percorso o qualsiasi cosa in cui la posizione implica la sequenza non lo è In caso di dubbio, lascia stare gli array, perché l'impostazione predefinita di tool's di preservare l'ordine non può mai corrompere i tuoi dati, mentre ordinare silenziosamente l'array sbagliato può.

Come si adatta questo con altri strumenti JSON?

L'ordinamento è di solito un passo in una piccola catena Quando JSON arriva minificato e illeggibile da un'API, lo eseguo attraverso il Formattatore JSON prima per rientrarlo e convalidarlo, quindi ordinare le chiavi per renderlo scansionabile Quando sto preparando un carico utile per il trasporto dopo l'ordinamento, il Minifier JSON lo riduce a una singola riga e, poiché le chiavi sono già ordinate, due payload minificati che rappresentano gli stessi dati risultano identici byte per byte, il che è utile per la memorizzazione nella cache e il confronto.

Per il lavoro strutturale piuttosto che per la presentazione, il Pialla JSON trasforma gli oggetti nidificati in chiavi tratteggiate e viceversa, che si abbina naturalmente all'ordinamento quando si disputa la configurazione in variabili di ambiente. E quando hai bisogno dei dati in un altro formato, il Convertitore JSON a YAML è la prossima fermata; l'ordinamento dei tasti prima della conversione ti dà un file YAML con un ordine di campo prevedibile e leggibile anche Se vuoi un quadro più ampio di come questi si incastrano, ho esposto la mia configurazione completa nel Guida al kit per gli sviluppatori web, e i meccanismi più profondi della formattazione vivono nel Guida al formattatore JSON.

Un esempio reale: domare un pacchetto.json diff

Lasciatemi camminare attraverso la situazione esatta che ha dato inizio a questo articolo, perché mostra perché le scelte di impostazione contano Ho avuto un package.json dove il dependencies il blocco era stato scritto in ordine di installazione, all'incirca nell'ordine in cui i pacchetti erano stati aggiunti in due anni. Un nuovo membro del team ha eseguito il formato editor's-on-save, che ordinava le chiavi di dipendenza e lo impegnava insieme a un cambiamento autentico: bumping di un pacchetto dalla versione 4 alla versione 5.

Il diff era un disastro Ogni dipendenza sotto quella urtata sembrava essersi spostata, perché l'ordinamento aveva spostato le loro posizioni, quindi il recensore vide trenta linee modificate per quello che era un aggiornamento di una riga La correzione non era discutere su quale editor fosse giusto La correzione era ordinare il file una volta, commettere quell'ordinamento come una propria modifica separata con un messaggio come & quot; ordina i tasti.json del pacchetto e quot; e poi fai in modo che la versione si sovrapponga all'ordine ora stabile Dopo di ciò, ogni futura modifica della dipendenza produceva una differenza pulita di una o due righe, perché il file era già nell'ordine tutti & #39; gli strumenti di s volevano inserirlo.

Questo è lo schema che seguo ora per qualsiasi JSON che vive nel controllo di versione. Ordinalo una volta in un commit dedicato, quindi tienilo ordinato. IL SORTER JSON con i suoi valori predefiniti, ascendente e ricorsivo, produce esattamente l'ordine che Prettier's ordina opzione e jq --sort-keys produci, quindi il file rimane stabile indipendentemente dallo strumento che viene eseguito da un compagno di squadra L'unica cosa che controllo per prima è gli array: package.json non ha array significativi di cui preoccuparsi, ma un file con un array ordinato come un elenco di passaggi di compilazione necessita dell'ordinamento dell'array interrotto, che è l'impostazione predefinita, quindi la sequenza sopravvive.

Quali strumenti e formati ordinano i tasti JSON?

L'ordinamento delle chiavi JSON è un'esigenza abbastanza comune da essere visualizzata in tutto l'ecosistema, il che è un buon segno che la pratica è sonora piuttosto che una stranezza personale. Il processore della riga di comando jq ha un --sort-keys bandiera, spesso scritta -Sche ordina le chiavi di ogni oggetto nel suo output Il formattatore di codice Prettier può ordinare le chiavi in JSON attraverso la sua configurazione Molti linter offrono una regola di sort-keys che segnala gli oggetti non ordinati nel codice sorgente Le librerie standard del linguaggio espongono la stessa capacità, ad esempio Python' s json.dumps accetta un sort_keys=True argomento che produce output canonici e ordinati.

Ciò che aggiunge un selezionatore basato su browser è il caso rapido e senza configurazione Quando si dispone di un blob di JSON da una risposta API, una riga di registro o un messaggio Slack e si desidera solo leggerlo in un ordine sano in questo momento, aprire una pagina e incollare è più veloce che cablare un formattatore o cadere in una shell È lo stesso motivo per cui un formattatore incolla e vai esiste insieme ai plugin dell'editor: lo strumento soddisfa l'esigenza ad hoc che la pipeline configurata non copre.

Il mio JSON è privato?

Sì. Il JSON viene analizzato, ordinato e riserializzato interamente nel browser utilizzando JavaScript. Non viene caricato nulla su un server, registrato o archiviato ovunque. Questo non è un dettaglio minore per JSON in particolare, perché JSON è il luogo in cui vivono i segreti: risposte API che trasportano token, file di configurazione con stringhe di connessione, payload contenenti record dei clienti. Incollare tutto ciò in uno strumento che lo spedisce a un server è un rischio reale ed è esattamente il rischio che questo strumento è costruito per evitare.

Puoi verificare il reclamo nello stesso modo in cui lo farei Aprire la scheda di rete nel tuo browser's strumenti per sviluppatori e guardarlo mentre si ordina; nessuna richiesta lascia la pagina Oppure disconnettersi da internet e continuare a ordinare, perché una volta che la pagina è stata caricata, lo strumento funziona senza alcuna connessione L'elaborazione lato client è l'impostazione predefinita per tutto ciò che costruisco, e se ti interessa l'argomento più ampio per questo, il Guida alla privacy dei dati rende il caso per intero.

Domande frequenti

Cosa significa ordinare le chiavi JSON?

Ordinamento delle chiavi JSON riordina le coppie nome-valore di un oggetto in ordine alfabetico senza modificare alcun valore L'oggetto {& quot;name":"toolz","author":"Liton"} diventa {& quot;author":"Liton","name":"toolz"}. Cambia solo l'ordine delle chiavi, quindi i dati che il documento rappresenta rimangono esattamente gli stessi.

L'ordinamento delle chiavi cambia il mio significato di JSON?

no . Nello standard JSON, ECMA-404, un oggetto è un insieme non ordinato di coppie nome-valore, quindi riordinare le sue chiavi non cambia il suo significato. Qualsiasi parser conforme legge le versioni ordinate e non ordinate come gli stessi dati. L'ordine è importante solo per la leggibilità umana e per la produzione di differenziali stabili.

Anche gli oggetti nidificati sono ordinati?

Sì, per impostazione predefinita. L'ordinamento ricorsivo è attivo, quindi le chiavi di ogni oggetto all'interno del documento vengono ordinate, a ogni livello di nidificazione. Puoi disattivare la ricorsione per ordinare solo le chiavi di livello superiore e lasciare gli oggetti nidificati nel loro ordine originale.

il sorter riordina gli array?

non per impostazione predefinita. Gli array vengono ordinati per definizione e il riordinarli può cambiare significato, quindi lo strumento conserva l'ordine dell'array. Esiste un'opzione per ordinare gli array i cui elementi sono tutte le stringhe o tutti i numeri quando li si desidera ordinare; gli array che mescolano i tipi o gli oggetti vengono sempre lasciati così come sono.

Perché dovrei ordinare le chiavi JSON?

Il motivo più comune è Diffs stabili: quando ogni file scrive le sue chiavi nello stesso ordine alfabetico, i diff di controllo della versione evidenziano solo i valori che sono cambiati anziché le chiavi che si sono spostate. L'ordinamento rende anche i file di configurazione di grandi dimensioni e le risposte API molto più facili da scansionare e confrontare a occhio.

Come funziona l'ordinamento case-insensitive?

Con l'ordinamento senza individizzazione attiva, le chiavi vengono confrontate come se in minuscolo, quindi nome, nome e nome vengono raggruppati uno accanto all'altro invece di essere separati perché le lettere maiuscole ordinano prima di quelle minuscole in ordine di caratteri grezzi. Disattivalo per ordinare rigorosamente per punto di codice del carattere.

Posso minimizzare il JSON ordinato?

si. Scegli l'output minimizzato per ottenere il JSON ordinato su una singola riga senza spazio aggiuntivo, che è il modulo più piccolo per lo stoccaggio o il trasporto. Per un file leggibile, scegli invece un output carino con un rientro a due, quattro spazi o schede.

Il mio JSON è stato caricato da qualche parte?

no . Il JSON viene analizzato e ordinato da JavaScript nel tuo browser e non viene mai trasmesso, registrato o archiviato. Puoi verificarlo guardando la scheda Rete durante l'ordinamento o andando offline, lo strumento continua a funzionare senza una connessione.


Scritto da Liton, costruttore di [Toolz.dev](/. Costruisco strumenti per sviluppatori basati su browser e scrivo di lavorare con JSON, Laravel e il web.

Comments

0 comments

0/2000 characters

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