这似乎是非常基本问题。我是JSON的新手,所以我为即将到来的facepalm做好了准备。
我有以下JSON文件(test-app-1.json):
"application.name": "test-app-1",
"environments": {
"development": [
"server1"
],
"stage": [
"server2",
"server3"
],
"production": [
"server4",
"server5"
]
}
目的是将其用作配置文件和输入验证的参考。
我正在使用bash 3.2
并将使用jq 1.4
(不最新版本)来阅读JSON。
问题: 我需要根据参数返回指定的JSON数组中的所有值。
示例:(文档和其他资源如何显示应该工作)
APPLICATION_ENVIRONMENT="developement"
jq --arg appenv "$APPLICATION_ENVIRONMENT" '.environments."$env[]"' test-app-1.json
如果执行,则返回null
。这应该返回server1
。
显然,如果我指定明确匹配环境下的JSON数组的文本,它可以正常工作:
jq 'environments.development[]' test-app-1.json
返回:server1
。
限制:我坚持这个项目的jq 1.4。我在不同的机器上尝试了1.5中相同的操作,但结果相同null
。
我在这里做错了什么?
答案 0 :(得分:1)
您有三个问题 - 两个拼写错误和一个jq
过滤器使用问题:
APPLICATION_ENVIRONMENT
设置为development
而不是developement
appenv
,请使用$appenv
,而不是$env
.environments[$appenv]
修复后,看起来像这样:
$ APPLICATION_ENVIRONMENT="development"
$ jq --arg appenv "$APPLICATION_ENVIRONMENT" '.environments[$appenv][]' test-app-1.json
"server1"