Todos los artículos

JSON Sort Keys: por qué ordenar las claves de un objeto

La especificación de JSON no define formalmente el orden de las claves en un objeto: {"a": 1, "b": 2} y {"b": 2, "a": 1} representan los mismos datos. Pero en la práctica el orden de las claves sigue importando a menudo, tanto para las personas como para las herramientas que trabajan con esos datos.

Por qué ordenar las claves

  • Comparación (diff). Si dos documentos JSON con los mismos datos tienen distinto orden de claves, un diff de texto mostrará una diferencia falsa. Ordenar elimina ese problema.
  • Salida determinista. Si el mismo objeto se serializa varias veces (por ejemplo, para generar un hash o una clave de caché), las claves ordenadas garantizan el mismo resultado cada vez.
  • Legibilidad. Un objeto ordenado alfabéticamente es más fácil de revisar rápidamente y de encontrar un campo concreto, sobre todo en estructuras grandes.

Ordenación recursiva

Para que el resultado sea predecible, la ordenación suele aplicarse de forma recursiva: no solo a las claves del nivel superior, sino a las de todos los objetos anidados a cualquier profundidad. El orden de los elementos de los arrays no se modifica, ya que en los arrays el orden de los elementos sí forma parte significativa de los datos.

Cuándo no hace falta

Si el JSON solo lo consume un programa (y no una persona o una herramienta de diff), ordenar las claves normalmente no aporta ninguna ventaja práctica: los analizadores leen un objeto igual sin importar el orden de sus campos.

Por qué "ñoño" ordenado a lo bruto acaba después de "zapato"

Una ordenación ingenua por code point de Unicode coloca la ñ (U+00F1) muy por detrás de toda la z ASCII (U+007A), así que una clave como "ñoño" aparecería después de "zapato" — al revés de lo que dictaría cualquier diccionario en español, donde la ñ se ordena justo después de la n. Además, hasta la reforma ortográfica de 1994, la Real Academia Española trataba "ch" y "ll" como letras propias del alfabeto, situadas después de la c y la l respectivamente en la ordenación tradicional; los diccionarios y listados alfabéticos más antiguos todavía reflejan ese criterio, aunque el software moderno ya no lo aplique.

Ordenación y localización

La ordenación alfabética de claves que contienen algo más que caracteres latinos depende de si los caracteres se comparan byte a byte (por code point de Unicode) o teniendo en cuenta reglas lingüísticas (locale-aware collation). Por ejemplo, la comparación por code point coloca las mayúsculas antes que las minúsculas independientemente del alfabeto, mientras que la ordenación con reglas de localización puede ordenar las claves de otra manera — algo a tener en cuenta si se compara el resultado entre distintos idiomas o sistemas.

Probar la herramienta