Ordenador de claves JSON
Ordena recursivamente todas las claves de objetos JSON alfabéticamente. El orden de los arrays se mantiene.
¿Esta herramienta resolvió tu problema?
Ejemplos 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, "", " ")Preguntas frecuentes
¿Por qué querría ordenar las claves JSON?
Ordenar las claves facilita la comparación de JSON con herramientas diff. Cuando dos objetos JSON tienen los mismos datos pero diferente orden de claves, un diff muestra cambios falsos. También ayuda con la serialización canónica, estandarización de archivos de configuración y navegación visual de objetos JSON grandes.
¿También ordena los objetos anidados recursivamente?
Sí. El ordenador procesa recursivamente todos los objetos anidados a cualquier profundidad. Los arrays mantienen su orden original — solo se ordenan las claves de los objetos.
¿Qué sucede con los arrays en el JSON?
Los elementos de los arrays mantienen su orden original porque los arrays son colecciones ordenadas por definición. Si un array contiene objetos, las claves dentro de cada objeto se ordenan, pero el orden del array en sí no cambia.
¿Hay un límite de tamaño para la entrada JSON?
No hay un límite explícito, pero archivos JSON muy grandes (varios MB) pueden ser lentos de procesar en el navegador. Para archivos grandes, recomendamos herramientas de línea de comandos como jq.
¿Cómo puedo ordenar las claves JSON desde la línea de comandos?
Use jq con el filtro to_entries | sort_by(.key) | from_entries, o json.dumps de Python con sort_keys=True. Vea los ejemplos de código a continuación.
¿Ordenar las claves cambia el significado de mi JSON?
No. Los objetos JSON se definen como colecciones no ordenadas de pares clave-valor, por lo que el orden de las claves no tiene significado semántico. Cualquier parser JSON producirá resultados idénticos independientemente del orden de las claves.