我的 JSON 具有特定的名称值和与并行节点中的名称值关联的 id(不要问我为什么,但我没有设计 JSON)。我想根据特定的 id 检索名称值。例如,我想根据
NAME - ABC Creations
检索
ID - 50200df3-7476-4bab-86ab-1aae4c097095
我正在使用
jsonpath-ng
python 库
Full JSON:
{
"Document":[
{
"Fields":[
{
"Type":{
"Text":"NAME",
"Confidence":97.65931701660156
},
"ValueDetection":{
"Text":"ABC Creations"
},
"PageNumber":1,
"GroupProperties":[
{
"Types":[
"RECEIVER_SOLD_TO"
],
"Id":"50200df3-7476-4bab-86ab-1aae4c097095"
}
]
},
{
"Type":{
"Text":"NAME",
"Confidence":92.77919006347656
},
"ValueDetection":{
"Text":"Hardwood Industries, Inc."
},
"PageNumber":1,
"GroupProperties":[
{
"Types":[
"VENDOR_REMIT_TO"
],
"Id":"844e1bf2-6adb-43fc-af41-bb26844bffe6"
}
]
},
{
"Type":{
"Text":"NAME",
"Confidence":93.58846282958984
},
"ValueDetection":{
"Text":"HARDWOOD INDUSTRIES, INC."
},
"PageNumber":1,
"GroupProperties":[
{
"Types":[
"VENDOR"
],
"Id":"1f7ec071-8c24-4160-979a-3c44d6884d55"
}
]
}
]
}
]
}
我可以使用以下方法检索所有名称值:
$.Document[*].Fields[?(@.Type.Text=='NAME')].ValueDetection.Text
Output is:
[
"ABC Creations",
"Hardwood Industries, Inc.",
"HARDWOOD INDUSTRIES, INC."
]
如果我根据 Id 查询,我不会得到名称:
$.Document[*].Fields[*].GroupProperties[?(@.Id=='50200df3-7476-4bab-86ab-1aae4c097095')]
Output:
[
{
"Types": [
"RECEIVER_SOLD_TO"
],
"Id": "50200df3-7476-4bab-86ab-1aae4c097095"
}
]
如有任何建议或帮助,我们将不胜感激。
您需要使用嵌套查询。
$.Document[*]
.Fields[?
@.GroupProperties[?
@.Id == '50200df3-7476-4bab-86ab-1aae4c097095'
]
]
.ValueDetection.Text
(单行)
$.Document[*].Fields[[email protected][[email protected] == '50200df3-7476-4bab-86ab-1aae4c097095']].ValueDetection.Text
前几段
$.Document[*]
让您进入Fields
数组。接下来,您要开始搜索项目。
外部查询找到所有带有
GroupProperties
的对象。因为这不与任何内容进行比较,所以它形成了“存在测试”,这意味着如果返回任何值,则选择查询适用的节点。
内部查询将外部查询细化为仅
GroupProperties
数组中具有适当 Id
值的对象。
一旦确定了外部集合,您就可以使用
.ValueDetection.Text
选择所需的值。
嵌套查询并未得到普遍支持,因此您可能需要检查您正在使用的实现,但这确实符合待定的 JSON 路径规范。
您可以在 https://json-everything.net/json-path(我的 .Net 实现的游乐场)玩这个。