100 % local — vos données ne quittent jamais votre navigateur

Trieur de clés JSON — un diff qu’on peut relire

Triez les clés d’un JSON par ordre alphabétique, à tous les niveaux. Deux fichiers triés pareil ne diffèrent plus que sur ce qui a vraiment changé.

Instantané Privé Zéro cookie
Indentation

Entrée JSON

Sortie JSON

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.

Questions fréquentes

Pourquoi mes tableaux ne sont-ils pas triés ?
Parce que l’ordre d’un tableau fait partie de son sens. `["read", "write"]` et `["write", "read"]` sont peut-être le même ensemble pour vous et une valeur différente pour ce qui lit le fichier : des étapes d’un pipeline, un ordre de priorité, une suite de migrations. Les clés d’un objet ne portent aucun ordre dans le modèle de données JSON ; les éléments d’un tableau, si.
Pourquoi Z passe-t-il avant a, et a avant é ?
Le tri se fait par point de code Unicode, non selon les règles d’une langue. C’est le seul ordre qui rende le même fichier sur toutes les machines : un classement sensible à la locale trierait vos clés autrement à Stockholm et à Paris, et un tri destiné à comparer des fichiers doit être reproductible avant tout.
Le tri me donne-t-il une forme canonique que je peux hacher ?
Pas tout à fait, et la nuance compte. Trier les clés est une partie de la canonisation ; la RFC 8785 (JSON Canonicalization Scheme) fixe aussi l’écriture des nombres et l’échappement des chaînes. Cet outil laisse délibérément les deux tranquilles : deux documents qui ne diffèrent que par `1.0` contre `1` se trient donc encore en deux textes différents. Utilisez une implémentation JCS s’il vous faut un hachage.

Convertisseurs associés