AZ Tools

JSON Ordenar Chaves

Desenvolvimento

Reordena as chaves de um objeto JSON em ordem alfabética, com descida recursiva opcional em objetos aninhados e arrays de objetos. Os arrays em si ficam na ordem original — só muda a ordem das chaves dos objetos. Útil pra diffs determinísticos (commitar um `package.json` ordenado pra reviewers verem só mudanças reais), normalizar fixtures de API antes de snapshot testing, ou bater com a ordem esperada por uma ferramenta downstream rigorosa quanto à ordem de chaves.

Ordenado

{
  "author": {
    "email": "demo@example.com",
    "name": "Alice"
  },
  "dependencies": {
    "astro": "^4",
    "react": "^18"
  },
  "name": "demo",
  "scripts": {
    "build": "astro build",
    "dev": "astro dev",
    "test": "vitest"
  },
  "version": "1.0.0"
}

Só chaves de objetos são reordenadas. A ordem dos elementos de array é preservada — ordene-os separadamente se precisar.

Como usar

  1. Cole seu JSON (um `package.json` ou qualquer objeto).
  2. Ative `deep` pra ordenar também objetos aninhados, ou deixe off pra ordenar só chaves do nível superior.
  3. Escolha ordem ascendente ou descendente e copie o resultado.

Perguntas frequentes

Reordena elementos de arrays?
Não — só chaves de objetos. Arrays mantêm sua ordem original porque a posição dos elementos costuma ser significativa. Se também precisa elementos de array ordenados, rode um passo de ordenação dedicado (jq `sort_by`, por exemplo) primeiro.
Por que eu ordenaria `package.json`?
Ferramentas como `npm` toleram a ordem das chaves, mas humanos não. Ordenar mantém reviewers focados em mudanças reais (nova dependência) em vez de churn do `npm install` reshuffling. Alguns times forçam isso com hook pre-commit `sort-package-json`.
A ordenação é locale-aware?
Não — é ordenação por code-point com folding case-insensitive opcional. Coincide com o que `jq`, `Object.keys().sort()` e a maioria das stdlibs faz por default. Colação por locale pode dar resultados diferentes pra chaves não-ASCII, mas raramente é o que você quer pra output canônico.
E JSON5 / comentários / vírgulas trailing?
Só JSON estrito — o input deve parsear com `JSON.parse`. Se tem arquivo config com comentários, tire-os primeiro ou use parser JSON5 antes de colar.

Ferramentas relacionadas