【问题标题】:How to add a variable in jq如何在jq中添加变量
【发布时间】:2022-10-25 12:17:03
【问题描述】:

我试图在从 JSON 文件中获取信息时添加一个变量,如下所示。

stack=$(cat profiles.json | jq '.generic.category')

email=$(cat profiles.json | jq '.central.[Need to add $stack variable here].email')
echo $email
password=$(cat profiles.json | jq '.central.[Need to add $stack variable here].password')
echo $password

我尝试了一些类似jq --arg v $stack '.central[$v]password*' 的方法,但没有奏效。

这就是我的profiles.json 的样子:

  "central": {
        "one": {
            "tenant": "xxx-yyy-zzz",
            "email": "xyz@gmail.com",
            "password": "1111"
         },
        "two": {
            "tenant": "aaa-bbb-ccc",
            "email": "xyz@gmail.com",
            "password": "2222"
         }
  },
  "generic": {
        "username": "root",
        "password": "xyz",
        "project": "ABC",
        "category": "two"
    }

使用变量获取所需信息的正确命令是什么?

【问题讨论】:

  • 请尝试添加引号--arg v "$stack"。
  • @pmf 我试过了,得到以下错误email_f=$(cat profiles.json | jq --arg v "$stack" '.central[$v]email')回声$电子邮件错误:jq:错误:语法错误,意外 IDENT,期望 $end(Unix shell 引用问题?)在 <top-level>,第 1 行:.central[$v]email jq:1 编译错误
  • '.central[$v]email' - 您在电子邮件之前缺少一个句点。
  • 您是否考虑过使用jq -r '.central[.generic.category].email' profiles.json? Demo
  • 完美的!!这些东西有帮助,它现在可以工作了

标签: json bash shell jq


【解决方案1】:
$ cat profiles.json
{
   "central": {
        "one": {
            "tenant": "xxx-yyy-zzz",
            "email": "xyz@gmail.com",
            "password": "1111"
         },
        "two": {
            "tenant": "aaa-bbb-ccc",
            "email": "xyz@gmail.com",
            "password": "2222"
         }
  },
  "generic": {
        "username": "root",
        "password": "xyz",
        "project": "ABC",
        "category": "two"
    }
}

$ jq --arg MYVAR one '.central[$MYVAR].password' profiles.json
"1111"

【讨论】:

    【解决方案2】:

    您可以不使用 shell 变量 stack,除非您想稍后在 shell 脚本的不同位置使用它。

    email=$(jq -r '.central[.generic.category].email' profiles.json)
    echo $email
    password=$(jq -r '.central[.generic.category].password' profiles.json)
    echo $password
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 2020-12-03
      • 2020-02-05
      • 2017-09-11
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多