如何使用jq读取嵌套的JSON数组并将单个值返回给变量?[复制]

How do I use jq to read nested JSON array and return single value to variable? [duplicate]

提问人:dbradish-gmail 提问时间:11/14/2023 最后编辑:Barbaros Özhandbradish-gmail 更新时间:11/14/2023 访问量:62

问:

这个问题在这里已经有答案了:
6天前关闭。

这篇文章在 6 天前被编辑并提交审核,未能重新打开帖子:

原始关闭原因未解决

我有一个简单的JSON文件,用于存储环境信息。

{
  "environments": {
    "dev": [
      {
        "id": "1",
        "vm-IP": "ww.www.ww.ww",
        "sql-name": "vmname1.eastus.cloudapp.azure.com",
        "status": "inactive"
      },
      {
        "id": "2",
        "vm-IP": "xx.xxx.xx.xx",
        "sql-name": "vmname2.eastus.cloudapp.azure.com",
        "status": "active"
      }
    ],
    "stg": {
      "id": "3",
      "vm-IP": "yy.yyy.yy.yy",
      "sql-name": "vmname3.eastus.cloudapp.azure.com"
    },
    "prod": {
      "id": "4",
      "vm-IP": "zz.zzz.zz.zz",
      "sql-name": "vmname4.eastus.cloudapp.azure.com"
    }
  }
}

使用 Bash 环境,我正在尝试读取 IP 地址。这是我成功的“stg”脚本:

# This script works as expected b/c "stg" is not an array
# See STG objects
varFileName=myJsonFile.json
jq '.environments.stg' $varFileName

# Get the IP of stg
stgIP=$(jq -r '.environments.stg."vm-IP"' $varFileName)
echo $stgIP

我想得到 environments.dev。vm-IP”。这是我不成功的“dev”脚本。

# These scripts do not work

# Get the IP of dev 2
devIP=$(jq -r '.environments.dev[]."vm-IP" | select(.status == "active")' $varFileName)
error: Cannot index string with string "status"

# this also does not work
devIP=$(jq -r '.environments.dev[]."vm-IP" | 
select(.environments.dev[].status == "active")' $varFileName)
error: Cannot index string with string "environments"

请提供过滤方面的帮助。jq

相关 SO 问题

JSON Bash 嵌套 JQ

评论


答: 暂无答案