Estoy intentando cargar un archivo JSON usando jq
peraquí. Es bastante sencillo y esto funciona:
$ cat ~/Downloads/json.txt | jq '.name'
"web"
Sin embargo, necesito asignar la salida de esta variable a un comando. Intenté hacer esto y esto funciona:
$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt
Pero yo quiero /home/qut/Downloads/web.txt
.
¿Cómo elimino las comillas, es decir, las cambio "web"
a web
?
Respuesta1
Puedes usar eltrcomando para eliminar las comillas:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
Respuesta2
En el caso particular de jq
, puede especificar que la salida debe estar encrudoformato:
--raw-output / -r:
With this option, if the filter´s result is a string then it will
be written directly to standard output rather than being formatted
as a JSON string with quotes. This can be useful for making jq fil‐
ters talk to non-JSON-based systems.
Para ilustrar usando el json.txt
archivo de muestra desu enlace:
$ jq '.name' json.txt
"Google"
mientras
$ jq -r '.name' json.txt
Google
Respuesta3
Es más simple y eficiente usar la función nativa de eliminación de prefijos/sufijos del shell:
my_json=$(cat ~/Downloads/json.txt | jq '.name')
temp="${my_json%\"}"
temp="${temp#\"}"
echo "$temp"
Fuentehttps://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable
Respuesta4
Podrías usar eval echo
así:
my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))
pero esto no es lo ideal: podría causar fácilmente errores y/o fallas de seguridad.