杰森是
{
"value": [
{
"resourceType": "virtualMachines",
"name": "Standard_B1ms",
"capabilities": [
{
"name": "MemoryGB",
"value": "6"
},
{
"name": "vCPUs",
"value": "5"
}
]
},
{
"resourceType": "virtualMachines",
"name": "Standard_B1s",
"tier": "Standard",
"size": "B1s",
"family": "standardBSFamily",
"capabilities": [
{
"name": "MemoryGB",
"value": "2"
},
{
"name": "vCPUs",
"value": "1"
}
]
}]
}
我只想要那些具有 vCPU >=2 且 MemoryGB >=4 功能的名称(例如 Standard_B1ms)。 我无法使用常规 jsonpath 来做到这一点,所以我尝试使用 jsonpath-plus 但我的尝试不成功。
可以使用 JsonPath-Plus 中提供的
^
父节点运算符来完成。思路是搜索完后向上,然后再下降,根据需要再次搜索数组。根据您的需要,您可以上升一个或多个节点并根据需要获取或搜索值。不幸的是,语法有点麻烦,但这对我有用:
$.value[*].capabilities[?(@.name === 'MemoryGB' && @.value >=4)]^^^[*][?(@.name === 'vCPUs' && @.value >=4)]^^^
将任务分成两个步骤可能会更好、更容易,例如首先过滤 4+ 内存:
$.value[*].capabilities[?(@.name === 'MemoryGB' && @.value >=4)]^^^
然后过滤 vCPU 的结果:
$.[*][?(@.name === 'vCPUs' && @.value >=4)]^^^