Ce que fait cet outil
Les clés de chaque objet, à toutes les profondeurs, par ordre alphabétique :
{ "serveur": { "port": 8080, "hote": "localhost" }, "debug": true }
{
"debug": true,
"serveur": {
"hote": "localhost",
"port": 8080
}
}
Les tableaux gardent leur ordre
Un objet JSON est un ensemble non ordonné de paires nom/valeur — la spécification le dit, et aucun analyseur ne promet de conserver l’ordre que vous avez écrit. Un tableau est une suite, et son ordre est une valeur.
["migrer", "peupler", "demarrer"]
Le trier transformerait un mode opératoire en liste de mots. Les tableaux sont donc laissés exactement tels quels, à tous les niveaux.
L’ordre est celui des points de code
Z passe avant a, et a avant é. C’est l’ordre des points de code Unicode, pas l’ordre alphabétique d’une langue en particulier.
C’est le seul choix qui donne la même sortie sur toutes les machines. Un tri sensible à la locale place ä à côté de a en allemand et après z en suédois : le même fichier reviendrait différent selon qui a lancé l’outil — ce qui ruine l’usage principal du tri, à savoir comparer deux fichiers qui ont divergé.
Trier n’est pas canoniser
Un document trié est plus facile à comparer. Ce n’est pas une forme canonique que l’on peut hacher.
La RFC 8785, le JSON Canonicalization Scheme, fixe aussi la façon d’écrire les nombres et d’échapper les chaînes. Cet outil ne touche délibérément ni à l’un ni à l’autre : 1.0 reste 1.0, et \u00e9 reste \u00e9. Deux documents qui veulent dire exactement la même chose peuvent donc encore se trier en deux textes différents.
S’il vous faut une empreinte stable d’une valeur JSON, passez par une implémentation de JCS. S’il vous faut voir ce qui a changé entre deux fichiers de configuration, triez-les tous les deux et comparez.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.