I'm using jq to form a JSON in bash from variable values.
Got how to make plain variables
$ VAR="one two three"
$ jq -n "{var:\"$VAR\"}"
{
"var": "one two three"
}
But can't make arrays yet. I have
$ echo $ARR
one
two
three
and want to get something like
{
"arr": ["one", "two", "three"]
}
I only manage to get garbled output like
$ jq -n "{arr: [\"$ARR\"]}"
{
"arr": [
"one\ntwo\nthree"
]
}
How to form JSON array in a correct way? Can jq
ever do that?
EDIT: Question was asked when there was only jq 1.3. Now, in jq 1.4, it is possible to do straightly what I asked for, like @JeffMercado and @peak suggested, upvote for them. Won't undo acceptance of @jbr 's answer though.
In jq 1.3 and up you can use the --arg VARIABLE VALUE
command-line option:
jq -n --arg v "$VAR" '{"foo": $v}'
I.e., --arg
sets a variable to the given value so you can then use $varname
in your jq program, and now you don't have to use shell variable interpolation into your jq program.
EDIT: From jq 1.5 and up, you can use --argjson to pass in an array directly, e.g.
jq -n --argjson v '[1,2,3]' '{"foo": $v}'