'Can I pass a string variable to jq not the file?
I want to convert JSON string into an array in bash. The JSON string is passed to the bash script as an argument (it doesn't exist in a file).
Is there a way of achieving it without using some temp files?
Similarly to this:
script.sh
#! /bin/bash
json_data='{"key":"value"}'
jq '.key' $json_data
jq: error: Could not open file {key:value}: No such file or directory
Solution 1:[1]
Solution 2:[2]
The value of the variable "json_data" that was given in the original question was not valid JSON, so this response still covers both cases (nearly-valid and valid JSON).
Valid JSON
If "$json_data" does hold a valid JSON value, then here are two alternatives not mentioned elsewhere on this page.
--argjson
For example:
jq -n --argjson data "$json_data" '$data.key'
env
If the shell variable is not aleady an environment variable:
json_data="$json_data" jq -n 'env.json_data | fromjson.key'
Nearly-valid JSON
If indeed $json_data is invalid as JSON but valid as a jq expression, then you could adopt the tactic illustrated by the following transcript:
$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
Solution 3:[3]
Use the bash: echo "$json_data" | jq '.key'
Solution 4:[4]
Absolutely. Just tell bash to give it a file instead.
jq '.key' <(echo "$json_data")
And make sure you run it in bash, not sh.
Solution 5:[5]
If you want to use inline command, I found this work on my Mac:
echo '{"key":"value"}' | jq .key
Solution 6:[6]
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
Solution 7:[7]
If you're trying to do this in a .sh
file, this is what worked for me:
local json_data $(getJiraIssue "$1") # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'` # pass that JSON var to jq
Solution 8:[8]
Just do
$ jq '.key' <<< $'{"key":"value"}'
"value"
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | jq170727 |
Solution 2 | Community |
Solution 3 | peak |
Solution 4 | Ignacio Vazquez-Abrams |
Solution 5 | Abigail Nguyen |
Solution 6 | taras |
Solution 7 | Wesley Smith |
Solution 8 | Logan Lee |