通过子jq获取父元素的值

Get value of parent element by child jq

代码:

{
  "endpointAgents": [
    {
      "agentId": "MyId",
      "agentName": "MYNAME",
      "location": {
        "locationName": "location"
      },
      "clients": [
        {
          "userProfile": {
            "userName": "Name"
          },
          "browserExtensions": [
            {
              "active": false
            }
          ]
        }
      ],
      "totalMemory": "16222 MB",
      "agentType": "enterprise"
    }
  ]
}

我需要 return agentId 值与值 userName。 我知道如何使用 JSONPath

($.endpointAgents[?(@.clients.userName=~ 'a')].agentId)

,但是不知道jq怎么用。

假设您的输入 JSON 是

{
  "endpointAgents": [
    {
      "agentId": "MyId",
      "agentName": "MYNAME",
      "location": {
        "locationName": "location"
      },
      "clients": [
        {
          "userProfile": {
            "userName": "Name"
          },
          "browserExtensions": [
            {
              "active": false
            }
          ]
        }
      ],
      "totalMemory": "16222 MB",
      "agentType": "enterprise"
    }
  ]
}

要从 endpointAgents 数组的 所有 项中获取 agentId 值,其中在同一对象中 至少一个 [= clients 数组中的 31=] 对象有一个 userProfile.userName 字符串值 包含 给定的子字符串,我会选择

jq -r '
  .endpointAgents[]
  | select(.clients | map(.userProfile.userName | contains("a")) | any)
  | .agentId
'
MyId

Demo

为了从 jq 外部导入查询字符串,使用 --arg 参数

jq -r --arg query "a" ' … contains($query) … '