基于并行节点ID使用jsonpath-ng提取对应NAME值的问题
用jsonpath-ng基于ID提取并行节点的NAME值
核心思路:由于ID和NAME属于同一层级的并行节点,需要先定位到包含目标ID的节点,再从该节点中提取对应的NAME字段。
代码实现示例
假设你的JSON结构类似如下(数组嵌套对象,每个对象包含ID和NAME):
{ "items": [ { "ID": "50200df3-7476-4bab-86ab-1aae4c097095", "NAME": "ABC Creations" }, { "ID": "123456", "NAME": "XYZ Corp" } ] }
对应的Python代码:
from jsonpath_ng import parse import json # 加载你的JSON数据(这里用示例数据演示) json_content = """ { "items": [ { "ID": "50200df3-7476-4bab-86ab-1aae4c097095", "NAME": "ABC Creations" }, { "ID": "123456", "NAME": "XYZ Corp" } ] } """ data = json.loads(json_content) # 指定要匹配的目标ID target_id = "50200df3-7476-4bab-86ab-1aae4c097095" # 构造JSONPath表达式:过滤出ID匹配的节点,再提取NAME expr = parse(f'$..[?(@.ID == "{target_id}")].NAME') # 执行查询并提取结果 results = [match.value for match in expr.find(data)] # 输出结果 if results: print(f"对应NAME值:{results[0]}") else: print("未找到匹配ID的NAME")
表达式说明
$..:递归遍历JSON中的所有节点,确保能找到任意层级下的目标节点[?(@.ID == "{target_id}")]:过滤条件,筛选出ID字段等于目标值的节点.NAME:从筛选出的节点中提取NAME字段的值
无论你的ID和NAME处于JSON的哪个层级,只要二者属于同一对象内,这个表达式都能生效。
内容的提问来源于stack exchange,提问作者SeaSky
相关产品推荐
相关产品推荐

