100 % locale — i tuoi dati non lasciano mai il tuo browser

Ordina chiavi JSON — un diff che si può leggere

Ordina le chiavi di un JSON in ordine alfabetico, a ogni livello. Due file ordinati allo stesso modo differiscono solo su ciò che è davvero cambiato.

Istantaneo Privato Zero cookie
Indentazione

Input JSON

Output JSON

Che cosa fa questo strumento

Le chiavi di ogni oggetto, a ogni profondità, in ordine alfabetico:

{ "server": { "porta": 8080, "host": "localhost" }, "debug": true }
{
  "debug": true,
  "server": {
    "host": "localhost",
    "porta": 8080
  }
}

Gli array conservano il loro ordine

Un oggetto JSON è un insieme non ordinato di coppie nome/valore — lo dice la specifica, e nessun parser promette di conservare l’ordine che hai scritto. Un array è una successione, e il suo ordine è un valore.

["migra", "popola", "avvia"]

Ordinarlo trasformerebbe una procedura in un elenco di parole. Gli array restano quindi esattamente come sono, a ogni livello.

L’ordine è quello dei punti di codice

Z viene prima di a, e a prima di é. È l’ordine dei punti di codice Unicode, non l’ordine alfabetico di una lingua particolare.

È l’unica scelta che dà la stessa uscita su ogni macchina. Un ordinamento sensibile alle impostazioni locali mette ä accanto ad a in tedesco e dopo la z in svedese: lo stesso file tornerebbe diverso a seconda di chi ha lanciato lo strumento — il che vanifica l’uso principale dell’ordinamento, cioè confrontare due file divergenti.

Ordinare non è canonicalizzare

Un documento ordinato è più facile da confrontare. Non è una forma canonica su cui calcolare un hash.

La RFC 8785, il JSON Canonicalization Scheme, fissa anche come si scrivono i numeri e come si proteggono le stringhe. Questo strumento non tocca né l’uno né l’altro di proposito: 1.0 resta 1.0, e \u00e9 resta \u00e9. Due documenti che vogliono dire esattamente la stessa cosa possono quindi ordinarsi in due testi diversi.

Se ti serve un’impronta stabile di un valore JSON, passa da un’implementazione di JCS. Se ti serve vedere che cosa è cambiato tra due file di configurazione, ordinali entrambi e confronta.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Perché i miei array non vengono ordinati?
Perché l’ordine di un array fa parte del suo significato. `["read", "write"]` e `["write", "read"]` possono essere lo stesso insieme per te e un valore diverso per ciò che legge il file: passi di una pipeline, un ordine di priorità, una successione di migrazioni. Le chiavi di un oggetto non portano ordine nel modello dati JSON; gli elementi di un array sì.
Perché Z viene prima di a, e a prima di é?
L’ordinamento è per punto di codice Unicode, non secondo le regole di una lingua. È l’unico ordine che dà lo stesso file su ogni macchina: una collazione sensibile alle impostazioni locali ordinerebbe le tue chiavi in un modo a Stoccolma e in un altro a Roma, e un ordinamento pensato per confrontare file dev’essere anzitutto riproducibile.
Ordinare mi dà una forma canonica su cui calcolare un hash?
Non proprio, e la differenza conta. Ordinare le chiavi è una parte della canonicalizzazione; la RFC 8785 (JSON Canonicalization Scheme) fissa anche come si scrivono i numeri e come si proteggono le stringhe. Questo strumento lascia entrambe intatte di proposito: due documenti che differiscono solo per `1.0` contro `1` si ordinano ancora in testi diversi. Usa un’implementazione di JCS se ti serve un hash.

Convertitori correlati