Usare jq parte 3

Scritto da il
🍒 Cherry Bin

jq parte 1 - jq parte 2

Come lavorare jq con oggetti innestati? Supponiamo il json:

{       
        "nome":"'$USER'",
        "kernel":"'$(uname -osr)'",
        "config":{
                "DE": "'$XDG_CURRENT_DESKTOP'",
                "GDMSession": "'$GDMSESSION'",
                "WM": "'$(wmctrl -m | cut -d " " -f 2 | head -1)'"
        },
        "date":"'$(date +"%Y-%m-%d")'"
}

Analizziamolo con jq, cercando ad esempio solo il DE come informazione:

echo '
{       
        "nome":"'$USER'",
        "kernel":"'$(uname -osr)'",
        "config":{
                "DE": "'$XDG_CURRENT_DESKTOP'",
                "GDMSession": "'$GDMSESSION'", 
                "WM": "'$(wmctrl -m | cut -d " " -f 2 | head -1)'"
        },
        "date":"'$(date +"%Y-%m-%d")'"
}
' | jq ".config.DE"

Basta concatenare con i punti le varie proprietà! Vediamo ora cosa succede se l’oggetto interno è un vettore, ad esempio consideriamo il json:

{       
        "nome":"'$USER'",
        "kernel":[
                "'$(uname -o)'",
                "'$(uname -s)'",
                "'$(uname -r)'"
        ],
        "config":{
                "DE": "'$XDG_CURRENT_DESKTOP'",
                "GDMSession": "'$GDMSESSION'",
                "WM": "'$(wmctrl -m | cut -d " " -f 2 | head -1)'"
        },
        "date":"'$(date +"%Y-%m-%d")'"
}

Quindi chiediamo di sapere solo la release del kernel (uname -r) :

 echo '
{       
        "nome":"'$USER'",
        "kernel":[
                "'$(uname -o)'",
                "'$(uname -s)'",
                "'$(uname -r)'"
        ],
        "config":{
                "DE": "'$XDG_CURRENT_DESKTOP'",
                "GDMSession": "'$GDMSESSION'",
                "WM": "'$(wmctrl -m | cut -d " " -f 2 | head -1)'"
        },
        "date":"'$(date +"%Y-%m-%d")'"
}
' | jq ".kernel[2]"

le parentesi quadre vanno affiancate direttamente al nome della chiave corrispettiva al vettore!