尝试过滤JSON以便根据子级的特征检索父级

  • 本文关键字:特征 检索 过滤 JSON json filtering
  • 更新时间 :
  • 英文 :


基于下面的JSON,我试图提取;DrugReleaseId";对于持有PickNrRangeBegin==558和PickNrRangeEnd==559的子级。

"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
}

我只有…美元。。数据[?(@.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"

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

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

但这仍然不太奏效。

这里有一个更简单的表达式;应该;工作:

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

我认为这些不起作用是特定jsonpath解析器实现的一个弱点。我刚试过最后一个表达https://jsonpath.herokuapp.com/,尝试了4种不同的实现方式。Gatling解析器实际上得到了正确的答案!但Jayway没有发现任何结果,另外两人都投错了球。叹气

最新更新