【问题标题】:JSON path expressions with reference to other node参考其他节点的 JSON 路径表达式
【发布时间】:2021-08-16 18:13:42
【问题描述】:

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

例如考虑遵循 JSON 路径,我想获得“Measurement”,使得“measurementID”等于“mid”节点的值。

我可以编写以下查询,但其中包含硬编码的“RR”值。

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

相反,我想编写以便从其他节点中选择“RR”。不幸的是,以下表达式对我不起作用。

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

{
"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,我不想写除了纯 JSON 路径之外的任何代码,我在上面尝试了几个在线评估器,我没有得到预期的结果,它给出了我空的结果:(
  • 我知道您只想使用 JSON 路径,但您必须使用一些库来根据数据评估路径。那个图书馆是什么,你看过哪些在线评估者?
  • 我用过jsonpath.com

标签: node.js json path expression jsonpath


【解决方案1】:

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

您使用的在线评估器似乎在后台使用了JsonPath-Plus。虽然这个库确实支持在比较操作中引用$ root,但需要不同的语法(这仍然无法在线工作,但我认为这是网站的问题):

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

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

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

您可以使用 Goessner 选项卡在线验证here

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

【讨论】:

    猜你喜欢
    • 2017-05-21
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多