首页 > 解决方案 > 如何交叉引用 JMESPath 或 JSONPath 中的属性?

问题描述

我正在尝试使用 jmespath 来查询我的 json,并且我正在尝试访问更高级别的属性。

下面是我的JSON:

{
    "properties": {
        "DefaultVMTypeID": "RT",
        "VM": {
            "measurements": [
                {
                    "vm": 45.62,
                    "vmString": "45.62",
                    "vmID": "RT",
                    "vmPathID": "osdu",
                    "vmTypeID": "RT",
                    "vmUnitOfMeasureID": "m"
                },
                {
                    "vm": 65,
                    "vmString": "65",
                    "vmID": "MT",
                    "vmPathID": "sample",
                    "vmTypeID": "MT",
                    "vmUnitOfMeasureID": "m"
                },
                {
                    "vm": 32,
                    "vmString": "32",
                    "vmID": "MT",
                    "vmPathID": "osduschemas",
                    "vmTypeID": "MT",
                    "vmUnitOfMeasureID": "m"
                },
                {
                    "vm": 95,
                    "vmString": "95",
                    "vmID": "MT",
                    "vmPathID": "schema",
                    "vmTypeID": "MT"
                }
            ]
        }
    }
}

我想获得vmId等于DefaultVMTypeID的所有测量值。

我尝试了以下查询: [properties.DefaultVerticalmeasurementTypeID, properties.Verticalmeasurements.measurements[?VerticalmeasurementTypeID]] | map(&[1].VerticalmeasurementTypeID==@[0], @)

但是当将map应用于数组时,@ 指的是数组的元素,而在 map 内部,我无法访问DefaultVMTypeID

我也尝试过转换对象的每个元素。

任何线索将不胜感激。

标签: normalizationjsonpathjmespathjson-path-expression

解决方案


您实际上可以使用$内部表达式来访问 JSON 的根。

所以 JSON 路径

$.properties.VM.measurements[?(@.vmID==$.properties.DefaultVMTypeID)]

应该可以获取measurements数组中匹配的所有项目。


推荐阅读