Estou tentando carregar um arquivo JSON usando jq
peraqui. É bastante simples e funciona:
$ cat ~/Downloads/json.txt | jq '.name'
"web"
Porém, preciso atribuir a saída desta variável a um comando. Eu tentei fazer isso e isso funciona:
$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt
Mas eu quero /home/qut/Downloads/web.txt
.
Como faço para remover as aspas, ou seja, mudar "web"
para web
?
Responder1
Você pode usar otrcomando para remover as aspas:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
Responder2
No caso particular de jq
, você pode especificar que a saída deve estar emcruformatar:
--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 o uso do json.txt
arquivo de amostra deseu link:
$ jq '.name' json.txt
"Google"
enquanto
$ jq -r '.name' json.txt
Google
Responder3
É mais simples e eficiente, usando o recurso de remoção de prefixo/sufixo do shell nativo:
my_json=$(cat ~/Downloads/json.txt | jq '.name')
temp="${my_json%\"}"
temp="${temp#\"}"
echo "$temp"
Fontehttps://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable
Responder4
Você poderia usar eval echo
assim:
my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))
mas isso não é o ideal - pode facilmente causar bugs e/ou falhas de segurança.