查询JQ格式的JSONPath

Query JSONPath in JQ Format

我有 JSONPath:

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

它在 Linux 上的 jq 格式会如何显示??

jq '.endpointAgents [] | select(.clients.userName=~"a") | {agentId}')"

无效。

代码:

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

I want to get userName value by specifying agentId

jq '.endpointAgents[] | select(.agentId == "MyId") | .clients[].userProfile.userName'

会输出"Name"


  • .endpointAgents[]
    遍历每个 endpointAgent

  • select(.agentId == "MyId")
    Select .agentId == "MyId"

    所在的对象
  • .clients[].userProfile.userName
    由于 clients 是一个数组,对其进行循环,并为每个对象显示 .userProfile.userName


Try it online!

如果我没理解错的话,您想使用名称匹配 a.

的客户端生成端点的代理 ID
.endpointAgents[] |
select( any( .clients[].userProfile.userName; test("a") ) ) |
.agentId

要使用名称等于 a 的客户端生成端点的代理 ID,请改用以下内容:

.endpointAgents[] |
select( any( .clients[].userProfile.userName; . == "a" ) ) |
.agentId