Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将bash变量(字符串)作为jq参数传递给walk JSON对象_Json_Bash_Jq - Fatal编程技术网

将bash变量(字符串)作为jq参数传递给walk 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

这似乎是一个非常基本的问题。我是JSON新手,所以我已经为即将到来的facepalm做好了准备

我有以下JSON文件(test-app-1.JSON):

目的是将其用作输入验证的配置文件和参考

我正在使用
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"