JQ 根据选择来选择特定键的问题

问题描述 投票:0回答:1

我在使用 JQ 时遇到问题,无法获取正确的字段。我没有那么多教程,但似乎无法理解。我试图只获取“mysql”容器的“cpu”,但我不断获取“sidecar 和 mysql”。老实说,我认为这是我对JQ的误解,所以请随时指出我的误解。

我不断收到以下信息,但应该只看到“2100m”:

null
2100m

jq -r --arg _NAME "mysql-innodb-cluster-0" #只获取该特定名称的容器

'.items[] #处理所有项目

| select(.metadata.name == $_NAME ) #在具有此名称的容器上工作

| .spec.containers #获取特定的key,这里将是一个对象。

select(.[].name=="sidecar" | not ) #现在你有了容器数组,只使用不名为“sidecar”的那个

| .[].resources.limits.cpu ' #您现在 MySQL 容器仅获取它的“cpu”值。

我使用的命令:

jq -r --arg _NAME "mysql-innodb-cluster-0" '.items[] | select(.metadata.name == $_NAME ) | .spec.containers | select(.[].name=="sidecar" | not ) | .[].resources.limits.cpu ' --raw-output /tmp/test.json

测试.json

{
 "apiVersion": "v1",
"items": [
{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "mysql-innodb-cluster-0"
  },
  "spec": {
    "containers": [
      {
        "name": "sidecar",
        "resources": {}
      },
      {
        "name": "mysql",
        "resources": {
          "limits": {
            "cpu": "2100m",
            "memory": "5G"
          }
        }
      }
    ]
  }
}
 ],
"kind": "List"
}
json jq
1个回答
0
投票

selected
输入正确的名称后,您需要继续
select
.spec.containers
上找到带有
name === "mysql"
的名称,然后从该对象中选择
.resources.limits.cpu

.items[] | select(.metadata.name == $_NAME) | (.spec.containers[] | select(.name == "mysql").resources?.limits?.cpu)

将输出:

"2100m"
© www.soinside.com 2019 - 2024. All rights reserved.