通过子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
为了从 jq 外部导入查询字符串,使用 --arg
参数
jq -r --arg query "a" ' … contains($query) … '
代码:
{
"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
为了从 jq 外部导入查询字符串,使用 --arg
参数
jq -r --arg query "a" ' … contains($query) … '