引用其他节点的JSON路径表达式



我想写一个JSON路径表达式,以便它引用表达式中的其他节点,我不想硬编码表达式中的任何值。

例如,考虑遵循JSON路径,我想得到";测量";使得";measurementID";等于"0"的值;中间";节点。

我可以写下面的查询,但它有硬编码的";RR";

$.myroot.measurements[?(@.measurementID=="RR"(].测量

相反,我想这样写;RR";将从其他节点中选取。不幸的是,下面的表达式对我不起作用。

$.myroot.measurements[?(@.measurementID==$.myrot.mid(].measurements

{
"myroot": {
"name": "ABC",
"nameA1iases": [
{
"AliasName": "23123",
"AliasNameTypeID": "test"
}
],
"nameTypeID": "test",
"mid": "RR",
"measurements": [
{
"Measurement": 2.62,  //-> This should be output of the JSON query
"measurementID": "RR",
"MeasurementPath": "demo",
"measurementType": "TT",
"UnitOfMeasure": "m"
},

{
"Measurement": 40.62,
"measurementID": "TR",
"MeasurementPath": "demo",
"measurementType": "T",
"measurementUnitOfMeasure": "m"
}
]
}    

}

有人能告诉我如何引用其他节点吗。

正如评论中所提到的,没有通用的JSONPath标准,某些功能的实现因库而异。

你使用的在线评估器似乎在幕后使用JsonPath Plus。虽然这个库确实支持在比较操作中引用$根,但需要不同的语法(这在网上仍然不起作用,但我认为这是网站的问题(:

$.myroot.measurements[?(@.measurementID == @root.myroot.mid)].Measurement

如果您使用Stefan Goessner的原始JavaScript实现,您可以按预期查询:

$.myroot.measurements[?(@.measurementID == $.myroot.mid)].Measurement

您可以在这里使用Goessner选项卡在线验证这一点。

然后,确保应用项目中使用的库的正确语法。

最新更新