Ordenador de chaves JSON
Ordene recursivamente todas as chaves de objetos JSON em ordem alfabética. A ordem dos arrays é preservada.
Esta ferramenta resolveu o seu problema?
Exemplos de código
JavaScript
// Recursive JSON key sort
function sortKeys(value, order = 'asc') {
if (Array.isArray(value))
return value.map(v => sortKeys(v, order));
if (value !== null && typeof value === 'object') {
const keys = Object.keys(value).sort(
order === 'asc'
? (a, b) => a.localeCompare(b)
: (a, b) => b.localeCompare(a)
);
return Object.fromEntries(
keys.map(k => [k, sortKeys(value[k], order)])
);
}
return value;
}
const sorted = JSON.stringify(
sortKeys({ z: 3, a: 1, m: 2 }),
null, 2
);
// { "a": 1, "m": 2, "z": 3 }Python
import json
data = {"z": 3, "a": 1, "m": 2, "nested": {"y": 9, "b": 2}}
# Built-in sort_keys option
sorted_json = json.dumps(data, sort_keys=True, indent=2)
print(sorted_json)
# {
# "a": 1,
# "m": 2,
# "nested": { "b": 2, "y": 9 },
# "z": 3
# }
# Reverse / descending sort
def sort_keys_desc(obj):
if isinstance(obj, dict):
return {k: sort_keys_desc(obj[k])
for k in sorted(obj, reverse=True)}
if isinstance(obj, list):
return [sort_keys_desc(v) for v in obj]
return objjq (CLI)
# Sort all keys recursively (ascending)
jq 'walk(if type == "object"
then to_entries | sort_by(.key) | from_entries
else . end)' input.json
# One-liner for simple objects
echo '{"z":3,"a":1}' | jq -S .
# -S flag sorts keys alphabetically
# Sort and save to file
jq -S . input.json > sorted.jsonGo
package main
import (
"encoding/json"
"sort"
)
// JSON marshaling in Go preserves map key
// order alphabetically by default.
func SortKeys(v interface{}) interface{} {
switch val := v.(type) {
case map[string]interface{}:
keys := make([]string, 0, len(val))
for k := range val { keys = append(keys, k) }
sort.Strings(keys)
result := make(map[string]interface{})
for _, k := range keys {
result[k] = SortKeys(val[k])
}
return result
case []interface{}:
for i, item := range val {
val[i] = SortKeys(item)
}
}
return v
}
// json.Marshal on map[string]interface{}
// already sorts keys alphabetically.
b, _ := json.MarshalIndent(data, "", " ")Perguntas frequentes
Por que eu deveria ordenar as chaves JSON?
Ordenar as chaves facilita a comparação de JSON com ferramentas diff. Quando dois objetos JSON têm os mesmos dados mas ordem de chaves diferente, um diff mostra alterações falsas. Também ajuda na serialização canônica, padronização de arquivos de configuração e navegação visual de objetos JSON grandes.
Objetos aninhados também são ordenados recursivamente?
Sim. O ordenador processa recursivamente todos os objetos aninhados em qualquer profundidade. Arrays mantêm sua ordem original — apenas as chaves dos objetos são ordenadas.
O que acontece com os arrays no JSON?
Os elementos dos arrays mantêm sua ordem original porque arrays são coleções ordenadas por definição. Se um array contém objetos, as chaves dentro de cada objeto são ordenadas, mas a ordem do array em si permanece inalterada.
Existe um limite de tamanho para a entrada JSON?
Não há limite explícito, mas arquivos JSON muito grandes (vários MB) podem ser lentos para processar no navegador. Para arquivos grandes, recomendamos ferramentas de linha de comando como jq.
Como posso ordenar chaves JSON pela linha de comando?
Use jq com o filtro to_entries | sort_by(.key) | from_entries, ou json.dumps do Python com sort_keys=True. Veja os exemplos de código abaixo.
Ordenar as chaves altera o significado do meu JSON?
Não. Objetos JSON são definidos como coleções não ordenadas de pares chave-valor, portanto a ordem das chaves não tem significado semântico. Qualquer parser JSON produzirá resultados idênticos independentemente da ordem das chaves.