【问题标题】:Trying to filter a JSON in order to retrieve the parent based on characteristics of the children尝试过滤 JSON 以根据子项的特征检索父项
【发布时间】:2022-02-09 04:47:19
【问题描述】:

基于下面的 JSON,我试图为持有 PickNrRangeBegin==558 和 PickNrRangeEnd==559 的孩子提取“DrugReleaseId”。

"Data":[
  {
     "DrugReleaseId":"8a7bb731-8802-11ec-8ba3-00505699a442",
     "Filters":[
        {
           "BulkBatch2LotIds":null,
           "DrugCodeId":"1",
           "DrugDescription":"Druggy - 10mg 28 tablets",
           "PickNrRangeBegin":558,
           "PickNrRangeEnd":559,
           "Quantity":null,
           "TemporaryUnavailable":null,
           "LotIds":[
              "ed65aa20-e3b7-11eb-8b9b-00505699a442"
           ]
        },
        {
           "BulkBatch2LotIds":null,
           "DrugCodeId":"2",
           "DrugDescription":"Placebo - 10mg 28 tablets",
           "PickNrRangeBegin":25505,
           "PickNrRangeEnd":25506,
           "Quantity":null,
           "TemporaryUnavailable":null,
           "LotIds":[
              "98025036-e92c-11eb-8b9b-00505699a442"
           ]
        }
     ],
     "DepotId":"01",
     "LotId":"b7179175-e92c-11eb-8b9b-00505699a442",
     "LabelGroupId":null,
     "CreatedByUserId":"8509960e-8181-4428-89bd-367c0be29a9a",
     "CreatedUtcDateTime":"Mon Feb 07 2022 00:00:00",
     "Status":0,
     "ProcessedByUserId":null,
     "ProcessedUtcDateTime":null
  }

我只需要 $..Data.[?(@.PickNrRangeBegin=='558') && ?(@.PickNrRangeBegin=='559')] 但这将返回所有包含的元素:

"BulkBatch2LotIds": null,
"DrugCodeId": "1",
"DrugDescription": "BAY123456 - 10mg 28 tablets",
"PickNrRangeBegin": 558,
"PickNrRangeEnd": 559,
"Quantity": null,
"TemporaryUnavailable": null,
"LotIds": [
  "ed65aa20-e3b7-11eb-8b9b-00505699a442"

【问题讨论】:

    标签: json filtering


    【解决方案1】:

    您需要将过滤器表达式应用于 Data 对象本身,而不是其子对象。你会认为这应该是……

    $..Data[?(@.Filters[*].PickNrRangeBegin == 558 && @.Filters[*].PickNrRangeEnd == 559)].DrugReleaseId
    

    ...但这仍然行不通。

    这是一个更简单的表达方式,也“应该”起作用:

    $..Data[?(@..PickNrRangeBegin == 558 && @..PickNrRangeEnd == 559)].DrugReleaseId
    

    我认为这些不起作用的事实是特定 jsonpath 解析器实现的一个弱点。我刚刚在https://jsonpath.herokuapp.com/ 上尝试了最后一个表达式,它尝试了 4 种不同的实现。 Gatling 解析器实际上得到了正确的答案!但是 Jayway 没有找到结果,另外两个抛出错误。叹息。

    【讨论】:

    • 是的。我试过了,但它确实不起作用
    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多