微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 jsonpath-plus 过滤值

如何解决使用 jsonpath-plus 过滤值

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","value": "2"
            },"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)]^^^

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。