normalization - 如何交叉引用 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。
我也尝试过转换对象的每个元素。
任何线索将不胜感激。
解决方案
您实际上可以使用$
内部表达式来访问 JSON 的根。
所以 JSON 路径
$.properties.VM.measurements[?(@.vmID==$.properties.DefaultVMTypeID)]
应该可以获取measurements
数组中匹配的所有项目。
推荐阅读
- javascript - 将键盘永久安装在屏幕上
- html - 如何在没有第三方的情况下使用 Angular/Typescript 对 HTML 表进行排序?
- typescript - 有没有办法在打字稿中合并不确定数量的函数的返回类型?
- asp.net - 从 ASP.NET 写入 Google 工作表中的电子表格
- azure-log-analytics - Kusto:如何取消透视 - 将列变成行?
- python - 删除重复项但保留对删除行的引用
- liferay - 在 Liferay DXP 7.2 上实施两因素身份验证
- weblogic - weblogic管理服务器的关闭脚本优雅地
- c# - 如何在 C# 中将匿名类型替换为显式类型
- php - Nginx 别名/根问题