Skip to content

Instantly share code, notes, and snippets.

@aleshivan
Last active July 22, 2025 20:08
Show Gist options
  • Select an option

  • Save aleshivan/4393fed333c4dbe7a21fb8b0e2367337 to your computer and use it in GitHub Desktop.

Select an option

Save aleshivan/4393fed333c4dbe7a21fb8b0e2367337 to your computer and use it in GitHub Desktop.
jq script to reorder JSON keys putting primitive fields first (recursively)

jqr — Reordenador de JSON con jq

jqr es un script de línea de comandos que reordena las claves de objetos JSON colocando primero los atributos simples (string, number, boolean, null) y luego los compuestos (object, array). Este reordenamiento se aplica recursivamente en todos los niveles del JSON.

Es útil para mejorar la legibilidad de respuestas API, debugging o para estructurar salidas consistentes antes de versionarlas o exportarlas.


Requisitos

  • jq versión 1.5 o superior

Instalación de jq:

# Ubuntu/Debian
sudo apt install jq

# macOS (Homebrew)
brew install jq

# Fedora/CentOS/RHEL
sudo dnf install jq

Instalación del script

Puedes instalarlo directamente desde el Gist:

curl -sSL https://gist.githubusercontent.com/aleshivan/4393fed333c4dbe7a21fb8b0e2367337/raw/jqr.sh -o ~/bin/jqr
chmod +x ~/bin/jqr

Asegúrate de que ~/bin esté en tu variable $PATH.


Uso

Desde un archivo:

jqr archivo.json

Desde stdin:

cat archivo.json | jqr

En combinación con curl:

curl -s http://localhost:8080/data | jqr

Opciones

-h, --help       Muestra esta ayuda

Ejemplo

Entrada (data.json):

{
  "c": {"inner": 123},
  "a": 1,
  "b": [10, 20],
  "z": true
}
jqr data.json

Salida:

{
  "a": 1,
  "z": true,
  "b": [10, 20],
  "c": {
    "inner": 123
  }
}

Gist original

https://gist.github.com/aleshivan/4393fed333c4dbe7a21fb8b0e2367337


Licencia

MIT — Puedes usarlo, modificarlo y compartirlo libremente.


#!/usr/bin/env zsh
# jqr - Reordena objetos JSON colocando atributos simples primero
# Atributos simples: string, number, boolean, null
# Atributos compuestos: object, array, se colocan después
# Aplicado recursivamente en todos los niveles
#
# Dependencias jq (https://stedolan.github.io/jq/)
# Requiere: jq >= 1.5
#
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat << 'EOF'
jqr — Reordena JSON colocando atributos simples primero
Uso:
jqr [archivo.json ...]
echo '{...}' | jqr
Descripción:
Este comando reordena las claves de los objetos JSON para que los atributos
con valores simples (cadenas, números, booleanos, null) aparezcan antes que
los atributos compuestos (objetos y arrays). El reordenamiento es recursivo
y se aplica en todos los niveles anidados.
Requiere: jq (https://stedolan.github.io/jq)
Opciones:
-h, --help Muestra esta ayuda y finaliza.
Ejemplos:
jqr # Lee desde stdin
jqr data.json # Procesa un archivo
curl -s http://localhost:8080/data | jqr
jqr *.json > consolidado.json
Nota: Si usa curl, no incluya --verbose, ya que genera salida no JSON.
EOF
exit 0
fi
# Verificar que jq esté instalado
if ! command -v jq >/dev/null 2>&1; then
printf 'Error: jq no está instalado.\n' >&2
printf 'Instale jq antes de usar este comando.\n' >&2
printf 'En sistemas basados en Debian/Ubuntu: sudo apt-get install jq\n' >&2
printf 'En macOS con Homebrew: brew install jq\n' >&2
printf 'En sistemas basados en Red Hat: sudo dnf install jq\n' >&2
exit 1
fi
# Aplicar transformación JSON: reordenar claves
jq '
def reorder:
if type == "object" then
. as $obj
| keys_unsorted
| sort_by(. as $k | $obj[$k] | type | IN("object", "array"))
| map({key: ., value: $obj[.] | reorder})
| from_entries
elif type == "array" then
map(reorder)
else
.
end;
reorder
' "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment