将bash变量(字符串)作为jq参数传递给walk JSON对象
这似乎是一个非常基本的问题。我是JSON新手,所以我已经为即将到来的facepalm做好了准备 我有以下JSON文件(test-app-1.JSON): 目的是将其用作输入验证的配置文件和参考 我正在使用将bash变量(字符串)作为jq参数传递给walk JSON对象,json,bash,jq,Json,Bash,Jq,这似乎是一个非常基本的问题。我是JSON新手,所以我已经为即将到来的facepalm做好了准备 我有以下JSON文件(test-app-1.JSON): 目的是将其用作输入验证的配置文件和参考 我正在使用bash3.2,并将使用jq1.4(不是最新版本)来读取JSON 问题是: 我需要根据参数返回指定JSON数组中的所有值 示例:(文档和其他资源表明它应该如何工作) APPLICATION\u ENVIRONMENT=“developement” jq--arg appenv“$APPLICAT
bash3.2
,并将使用jq1.4
(不是最新版本)来读取JSON
问题是:
我需要根据参数返回指定JSON数组中的所有值
示例:(文档和其他资源表明它应该如何工作)
APPLICATION\u ENVIRONMENT=“developement”
jq--arg appenv“$APPLICATION_ENVIRONMENT”.环境“$env[]”test-app-1.json
如果执行,则返回null
。这应该返回server1
显然,如果我在environment下指定与JSON数组显式匹配的文本,它就可以正常工作:
jq'environments.development[]'test-app-1.json
返回:server1
限制:对于这个项目,我坚持使用JQ1.4。我在不同的机器上尝试了1.5中的相同操作,结果相同null
我做错了什么
jq文档:您有三个问题-两个打字错误和一个
jq
过滤器使用问题:
- 将
设置为APPLICATION\u-ENVIRONMENT
而不是development
development
- 一致使用变量名:如果定义
,请使用appenv
,而不是$appenv
$env
- 使用
.environments[$appenv]
$ APPLICATION_ENVIRONMENT="development"
$ jq --arg appenv "$APPLICATION_ENVIRONMENT" '.environments[$appenv][]' test-app-1.json
"server1"
这都是关于引用。没有变量在单引号内展开,即
“stuff”
。改为“stuff”
。为这些拼写错误表示歉意…我发誓这些错误不在原始代码中:)谢谢!成功了。试着去理解我是怎么错过的。为什么在'.environments.[$appenv][]'
中使用[]
围绕$appenv
的
?只能对文字使用点符号a.b
;对于变量,请使用括号,a[var]
。就像在JavaScript(JSON的超集)中一样,以下是JQ1.4文档中描述这一点的部分:和@randomir Yes!抱歉耽搁了。非常感谢您的帮助和解释。@AustinH,很高兴它起了作用。也请考虑,所以我们关闭这个问题。
$ APPLICATION_ENVIRONMENT="development"
$ jq --arg appenv "$APPLICATION_ENVIRONMENT" '.environments[$appenv][]' test-app-1.json
"server1"