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

问题描述 投票:0回答:8

我想在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
json bash variables input jq
8个回答
185
投票

我建议使用bash这里字符串。 例如

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

41
投票

原始问题中给出的变量“json_data”的值不是有效的 JSON,因此此响应仍然涵盖两种情况(接近有效和有效的 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

如果 $json_data 确实作为 JSON 无效,但作为 jq 表达式有效,那么您可以采用以下记录所示的策略:

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

23
投票

使用bash:

echo "$json_data" | jq '.key'


12
投票

当然。只需告诉 bash 给它一个文件

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

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


9
投票

如果你想使用内联命令,我在我的 Mac 上找到了这个工作:

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

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

2
投票

如果您尝试在

.sh
文件中执行此操作,这对我有用:

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

-2
投票

就做吧

$ jq '.key' <<< $'{"key":"value"}'
"value"
© www.soinside.com 2019 - 2024. All rights reserved.