首页 > 解决方案 > 使用 jq 并循环遍历 json 并获取多个值

问题描述

我有命令使用 json 文件中的 jq 获取单个响应。但是当我使用 [] 时没有显示多个值。这是我的 json

{
  "status" : "UP",
  "details" : {
    "Service1" : {
      "status" : "UP",
      "details" : {
        "Credit" : {
          "status" : "UP",
          "details" : {
            "Tablename" : "credittable"
          }
        }
      }
    },
    "Service2" : {
      "status" : "UP",
      "details" : {
        "Debit" : {
          "status" : "UP",
          "details" : {
            "Tablename" : "debittable"
          }
        }
      }
    },
    "Service3" : {
      "status" : "UP",
      "details" : {
        "Loan" : {
          "status" : "UP",
          "details" : {
            "Tablename" : "loantable"
          }
        }
      }
    }
  }
}

以下是我的命令:

cat api.json | jq '.details.Service1.status'
cat api.json | jq '.details.Service1.details.Credit.status'
cat api.json | jq '.details.Service1.details.Credit.details.TableName

目前将这些值分配给各个变量,然后进行回显,想看看我们是否可以有一个循环并用一个命令显示所有内容。

我正在尝试打印如下

Service1  up  
credittable  up  
Service2 UP  
debittable up  
Service3 up  
loantable up  

标签: jsonjq

解决方案


使用 -r 选项,以下过滤器:

.details
| to_entries[]
| "\(.key) \(.value.status)",
  (.value.details[]
   | "\(.details.Tablename) \(.status)" )

产生所需的输出。


推荐阅读