我想在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
我建议使用bash这里字符串。 例如
jq '.key' <<< "$json_data"
原始问题中给出的变量“json_data”的值不是有效的 JSON,因此此响应仍然涵盖两种情况(接近有效和有效的 JSON)。
如果“$json_data”确实包含有效的 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"
使用bash:
echo "$json_data" | jq '.key'
如果你想使用内联命令,我在我的 Mac 上找到了这个工作:
echo '{"key":"value"}' | jq .key
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'
如果您尝试在
.sh
文件中执行此操作,这对我有用:
local json_data $(getJiraIssue "$1") # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'` # pass that JSON var to jq
就做吧
$ jq '.key' <<< $'{"key":"value"}'
"value"