100 % local — seus dados nunca saem do seu navegador

Ordenar chaves JSON — um diff que dá para ler

Ordene as chaves de um JSON em ordem alfabética, em todos os níveis. Dois arquivos ordenados igual só diferem naquilo que mudou de verdade.

Instantâneo Privado Zero cookies
Indentação

Entrada JSON

Saída JSON

O que esta ferramenta faz

As chaves de cada objeto, em qualquer profundidade, em ordem alfabética:

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

Os arrays mantêm a ordem

Um objeto JSON é um conjunto não ordenado de pares nome/valor — diz a especificação, e nenhum analisador promete preservar a ordem que você escreveu. Um array é uma sequência, e a ordem dele é um valor.

["migrar", "popular", "iniciar"]

Ordenar isso transformaria um procedimento numa lista de palavras. Por isso os arrays ficam exatamente como estão, em todos os níveis.

A ordem é a dos pontos de código

Z vem antes de a, e a antes de é. É a ordem de pontos de código Unicode, não a ordem alfabética de um idioma específico.

É a única escolha que dá a mesma saída em todas as máquinas. Uma ordenação sensível à localidade põe ä ao lado de a em alemão e depois de z em sueco: o mesmo arquivo voltaria diferente conforme quem rodou a ferramenta — o que arruína o uso principal de ordenar, que é comparar dois arquivos que divergiram.

Ordenar não é canonicalizar

Um documento ordenado é mais fácil de comparar. Não é uma forma canônica que se possa hashear.

A RFC 8785, o JSON Canonicalization Scheme, fixa também como os números são escritos e como as strings são escapadas. Esta ferramenta não toca em nenhum dos dois de propósito: 1.0 continua 1.0, e \u00e9 continua \u00e9. Dois documentos que significam exatamente a mesma coisa podem, portanto, ordenar para dois textos diferentes.

Se você precisa de uma impressão digital estável de um valor JSON, use uma implementação de JCS. Se precisa ver o que mudou entre dois arquivos de configuração, ordene os dois e compare.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

Por que meus arrays não são ordenados?
Porque a ordem de um array faz parte do seu significado. `["read", "write"]` e `["write", "read"]` podem ser o mesmo conjunto para você e um valor diferente para quem lê o arquivo: etapas de um pipeline, ordem de prioridade, uma sequência de migrações. As chaves de um objeto não carregam ordem no modelo de dados JSON; os elementos de um array sim.
Por que Z vem antes de a, e a antes de é?
A ordenação é por ponto de código Unicode, não pelas regras de um idioma. É a única ordem que dá o mesmo arquivo em todas as máquinas: uma colação sensível à localidade ordenaria suas chaves de um jeito em Estocolmo e de outro em Lisboa, e uma ordenação feita para comparar arquivos precisa ser reproduzível acima de tudo.
Ordenar me dá uma forma canônica que eu possa hashear?
Não exatamente, e a diferença importa. Ordenar as chaves é uma parte da canonicalização; a RFC 8785 (JSON Canonicalization Scheme) fixa também como os números são escritos e como as strings são escapadas. Esta ferramenta deixa as duas coisas intactas de propósito: dois documentos que só diferem em `1.0` contra `1` ainda ordenam para textos diferentes. Use uma implementação de JCS se precisa de um hash.

Conversores relacionados