使用jq,我想获取块的“name”值,其中“Media”属性(在.session.attributeList下)包含“node7000”字符串(在示例中,json第一个数组块与其匹配 - 有两个匹配:
“值”:“节点7000”
"value": "node7000 和 node8000"
预期 jq 输出为:
“17200站”
[{
"name": "Station 17200",
"attributes": [{
"name": "EnableLog",
"value": "1"
}, {
"name": "LogFont",
"value": "0"
}, {
"name": "IdleTimer",
"value": "30"
}
],
"session": [{
"attributeList": [{
"name": "Launch",
"value": "1"
}, {
"name": "Media",
"value": "node7000"
}
]
}, {
"attributeList": [{
"name": "Group",
"value": "1"
}, {
"name": "RMedia",
"value": "1"
}
]
}, {
"attributeList": [{
"name": "Launch",
"value": ""
}, {
"name": "Media",
"value": "node7000 and node8000"
}
]
}
]
},
{
"name": "Station 17300",
"attributes": [{
"name": "EnableLog",
"value": "1"
}, {
"name": "LogFont",
"value": "0"
}, {
"name": "IdleTimer",
"value": "30"
}
],
"session": [{
"attributeList": [{
"name": "Launch",
"value": "1"
}, {
"name": "Media",
"value": "node6000"
}
]
}, {
"attributeList": [{
"name": "Group",
"value": "1"
}, {
"name": "RMedia",
"value": "1"
}
]
}, {
"attributeList": [{
"name": "Launch",
"value": ""
}, {
"name": "Media",
"value": "node6001"
}
]
}
]
}]
Run Code Online (Sandbox Code Playgroud)
jq解决方案:
jq '.[] | select([.session[].attributeList[]
| .name == "Media" and (.value | contains("node7000"))
] | any ).name' jsonfile
Run Code Online (Sandbox Code Playgroud)
.[]- 迭代输入数组的所有元素(对象)select(<condition>)<condition>- 如果返回该输入,则该函数将不改变其输入true,否则不产生输出contains(element)- 过滤器生成true是否element完全包含在输入中any- 过滤器将布尔值数组作为输入,true如果数组中的任何元素为true输出:
"Station 17200"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |