我可以将字符串变量传递给jq而不是文件吗?

时间:2017-11-03 22:55:25

标签: json bash variables input jq

我想在bash中将JSON字符串转换为数组。 JSON字符串作为参数传递给bash脚本(它不存在于文件中)。

有没有办法在不使用某些临时文件的情况下实现它?

与此类似:

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

7 个答案:

答案 0 :(得分:24)

我建议使用bash here string。 e.g。

jq '.key' <<< "$json_data"

答案 1 :(得分:8)

变量&#34; json_data&#34;的值在原始问题中给出的是无效的JSON,因此这个响应仍然涵盖了两种情况(几乎有效且有效的JSON)。

有效JSON

如果&#34; $ json_data&#34;确实持有有效的JSON值,然后这里有两个本页其他地方没有提到的替代方案。

--argjson

例如:

 jq -n --argjson data "$json_data" '$data.key'

env

如果shell变量不是环境变量:

json_data="$json_data" jq -n 'env.json_data | fromjson.key'

几乎有效的JSON

如果$ json_data确实是无效作为JSON但是作为jq表达式有效,那么你可以采用以下成绩单所示的策略:

$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"

答案 2 :(得分:4)

使用bash:echo "$json_data" | jq '.key'

答案 3 :(得分:3)

绝对。告诉bash give it a file instead

jq '.key' <(echo "$json_data")

并确保以bash运行它,而不是sh。

答案 4 :(得分:1)

#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'

答案 5 :(得分:0)

如果您尝试在.sh文件中执行此操作,这对我有用:

local json_data $(getJiraIssue "$1")               # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'`   # pass that JSON var to jq

答案 6 :(得分:0)

如果要使用内联命令,我在Mac上发现了此功能:

echo '{"key":"value"}' | jq .key