【问题标题】:How to cross reference a property in JMESPath or JSONPath?如何交叉引用 JMESPath 或 JSONPath 中的属性?
【发布时间】:2021-08-15 17:05:40
【问题描述】:

我正在尝试使用 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], @)

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

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

任何线索将不胜感激。

【问题讨论】:

    标签: normalization jsonpath jmespath json-path-expression


    【解决方案1】:

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

    • 自定义函数
    • 根值访问

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

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

    【讨论】:

      【解决方案2】:

      您实际上可以在表达式中使用 $ 来访问 JSON 的根目录。

      所以 JSON 路径

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

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

      【讨论】:

      • 这些是对原始包的增强。我正在寻找实际的库功能,但它不存在。
      • 不,这是原始 JSON 路径。它应该被大多数(如果不是所有)包支持。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2012-01-12
      相关资源
      最近更新 更多