【问题标题】:Get json field value by variable with jq使用jq通过变量获取json字段值
【发布时间】:2018-09-06 13:43:48
【问题描述】:

我正在尝试读取 json 变量的字段值,字段名称也存储在变量中。

我尝试了什么:

$ jsonVar=`cat test-config.json`
$ echo $jsonVar
{ "server-test": "xxx", "server2-test": "xxx", "server3-test": "xxx"}
$ echo $it
server-test
$ itVersion=$(jq --arg test "${it}" '.["${test}"]' <<< $jsonVar);
$ echo $itVersion
null

$itVersion 现在应该有"server-test" 的值,但是是null,看来我的 JQ 命令是错误的,但我不知道为什么。

【问题讨论】:

  • 从谓词中删除双引号和{}echo '{ "server-test": "xxx", "server2-test": "xxx", "server3-test": "xxx"}' | jq --arg test server-test '.[$test]' 有效
  • 不客气,我刚刚把评论变成了答案

标签: bash sh jq


【解决方案1】:

该变量只能作为$var 访问,而不是${var}。另外,它被扩展为一个带引号的字符串,所以用双引号括起来是多余的。

我建议您使用以下内容:

itVersion=$(jq --arg test "${it}" '.[$test]' test-config.json)

【讨论】:

  • 需要明确的是,${var} 形式的变量是 shell 使用的格式。我们在这里没有使用 shell 变量替换,而是使用 jq 的变量,其格式必须为 $var
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
相关资源
最近更新 更多