如何根据条件 jq 查询获得平面输出?

How to get a flat output based on conditional jq query?

我有以下 JSON:

[
  {
    "name": "InstanceA",
    "tags": [
      {
        "key": "environment",
        "value": "production"
      },
      {
        "key": "group",
        "value": "group1"
      }
    ]
  },
  {
    "name": "InstanceB",
    "tags": [
      {
        "key": "group",
        "value": "group2"
      },
      {
        "key": "environment",
        "value": "staging"
      }
    ]
  }
]

我正在尝试根据条件 key == 'environment' 获得 value 的平坦输出。我已经尝试了 select(boolean_expression),但我无法获得所需的输出,例如:

"InstanceA, production"
"InstanceB, staging"

jq支持这种输出吗?如果可以,怎么做?

jq '.[] | .name + ", " + (.tags[] | select(.key == "environment").value)' f.json

是的。

例如:

$ jq '.[] | "\(.name), \(.tags | from_entries | .environment)"' input.json

输出:

"InstanceA, production"
"InstanceB, staging"

这是一个使用 join

的解决方案
  .[]
| [.name, (.tags[] | if .key == "environment" then .value else empty end)]
| join(", ")