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.