Ordenador de claves JSON

Ordena recursivamente todas las claves de objetos JSON alfabéticamente. El orden de los arrays se mantiene.

Orden:
Sangría:
Ejemplos:
JSON de entrada0 caracteres
Salida ordenada

¿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 obj

jq (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.json

Go

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.