0

我正在尝试使用 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

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

任何线索将不胜感激。

4

2 回答 2

0

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

所以 JSON 路径

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

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

于 2021-08-15T23:59:23.290 回答
0

我在 JMESPath 库上遇到了 TS 翻译,它有 2 个增强功能。

  • 自定义函数
  • 根值访问

https://github.com/nanoporetech/jmespath-ts

这帮助我解决了我的问题。[properties.Verticalmeasurements.measurements][] | [?VerticalmeasurementID==$.properties.DefaultVerticalmeasurementTypeID]

于 2021-08-15T19:23:33.627 回答