我想在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
答案 0 :(得分:24)
我建议使用bash here string。 e.g。
jq '.key' <<< "$json_data"
答案 1 :(得分:8)
变量&#34; json_data&#34;的值在原始问题中给出的是无效的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_data确实是无效作为JSON但是作为jq表达式有效,那么你可以采用以下成绩单所示的策略:
$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"
答案 2 :(得分:4)
使用bash:echo "$json_data" | jq '.key'
答案 3 :(得分:3)
答案 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