I am trying to load a JSON file using jq per here. It is quite straightforward and this works:
$ cat ~/Downloads/json.txt | jq '.name' "web" However, I need to assign the output of this variable to a command. I tried to do this and this works:
$ my_json=`cat ~/Downloads/json.txt | jq '.name'` $ myfile=~/Downloads/$my_json.txt $ echo $myfile /home/qut/Downloads/"web".txt But I want /home/qut/Downloads/web.txt.
How do I remove the quotes, i.e. change "web" to web?
4 Answers
You can use the tr command to remove the quotes:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \") 1In the particular case of jq, you can specify that the output should be in raw format:
--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. To illustrate using the sample json.txt file from your link:
$ jq '.name' json.txt "Google" whereas
$ jq -r '.name' json.txt Google 0You could use eval echo like this:
my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name')) but this is not ideal - could easily cause bugs and/or security flaws.
There's more simple and efficient, using the native shell prefix/suffix removal feature:
my_json=$(cat ~/Downloads/json.txt | jq '.name') temp="${my_json%\"}" temp="${temp#\"}" echo "$temp"