0

json是

{
    "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 但我的尝试不成功。

4

1 回答 1

0

可以使用^JsonPath-Plus 中可用的父节点运算符来完成。这个想法是在搜索后上升然后再次下降以根据需要再次搜索数组。根据您的需要,您可以上升一个或多个节点并根据需要获取或搜索值。不幸的是,语法有点麻烦,但这对我有用:

$.value[*].capabilities[?(@.name === 'MemoryGB' && @.value >=4)]^^^[*][?(@.name === 'vCPUs' && @.value >=4)]^^^

将任务分为两个步骤可能会更好,更容易,例如首先过滤 4+ 内存:

$.value[*].capabilities[?(@.name === 'MemoryGB' && @.value >=4)]^^^

然后过滤 vCPU 的结果:

$.[*][?(@.name === 'vCPUs' && @.value >=4)]^^^
于 2021-06-01T19:27:07.937 回答