我想写一个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选项卡在线验证这一点。
然后,确保应用项目中使用的库的正确语法。