es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

jq: falta la clave delante del valor, solo se está imprimiendo el valor

Este es el raw data que obtengo de mi API:

{
"observations": [
{
"winddir": 292,
"humidity": 92,
"qcStatus": 1,
"imperial": {
"temp": 20,
"heatIndex": 20,
"dewpt": 40,
"windChill": 20,
"windSpeed": 3,
"windGust": 3,
"pressure": 29.71,
"precipRate": 0,
"precipTotal": 0.01,
"elev": 1905
}
}
]
}

Este es el comando que ejecuto:

curl -s 'https://api.myawesomeapidata.com' | jq -r '.observations[].winddir, .observations[].humidity, .observations[].imperial.temp'

Este es el resultado:

292
92
20

Este es el resultado que me gustaría obtener:

Dirección del viento: 292
Humedad: 92
Temperatura: 20

Pero también estaría bien si el resultado fuera este:

winddir: 292
humidity: 92
temp: 20

Como puedes ver, me gustaría que la clave aparezca antes del valor. Preferiblemente permitiéndome cambiar el nombre de la clave (Dirección del viento) antes de imprimir, pero también estaría bien si se utiliza el nombre original de la clave (winddir).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada con nombres de clave personalizados, podemos modificar el comando JQ de la siguiente manera:

    curl -s 'https://api.myawesomeapidata.com' | jq -r '.observations[] | "Dirección del viento: \(.winddir)\nHumedad: \(.humidity)\nTemperatura: \(.imperial.temp)"'
    

    El comando anterior producirá la siguiente salida:

    Dirección del viento: 292
    Humedad: 92
    Temperatura: 20
    

    Aquí estamos usando la función de interpolación de cadenas de JQ para dar formato a la salida con nombres de clave personalizados. También estamos usando el carácter de nueva línea \n para separar la salida de cada observación.

    Alternativamente, si queremos mantener los nombres originales de las claves, podemos modificar el comando JQ de la siguiente manera:

    curl -s 'https://api.myawesomeapidata.com' | jq -r '.observations[] | "winddir: \(.winddir)\nhumidity: \(.humidity)\ntemp: \(.imperial.temp)"'
    

    El comando anterior producirá la siguiente salida:

    winddir: 292
    humidity: 92
    temp: 20
    

    Aquí estamos utilizando la misma función de interpolación de cadenas para dar formato a la salida, pero mantenemos los nombres de clave originales. Nuevamente, estamos utilizando el carácter \n para separar la salida de cada observación.

Comments are closed.