如何使用JMESPath获取JSON中_ISSUE_CURRENCY值并校验属性存在性
正确实现方案
问题原因
你原有代码取值失败的核心原因:
- JMESPath查询路径未指向最终目标字段,
validatedAsset.assetName返回的结果本身就是包含_ISSUE_CURRENCY的字典对象,你没有继续向下取目标属性 - 缺少明确的属性存在性判断逻辑,裸
except捕获异常会掩盖真实错误,也无法精准判断字段是否存在
方案1:原生Python字典校验取值(无额外依赖,逻辑可控)
import json import jmespath # 原有文件读取加载逻辑 f_asset = open(f"{tempdir}\\cdwassets_all.csv", encoding="utf-8").read().replace("\n", "") json_obj_asset = json.loads(f_asset, strict=False) issue_cur = "" # 先获取上层对象 asset_info = jmespath.search("validatedAsset.assetName", doc) # 先判断上层对象是否合法,再判断目标属性是否存在 if isinstance(asset_info, dict) and "_ISSUE_CURRENCY" in asset_info: issue_cur = asset_info["_ISSUE_CURRENCY"] print(issue_cur) # 输出结果:EUR
方案2:JMESPath直接查询(代码更简洁)
JMESPath路径查询如果目标字段不存在会自动返回None,不需要手动判断Key是否存在:
import jmespath # 直接把目标字段拼到查询路径末尾 query_res = jmespath.search("validatedAsset.assetName._ISSUE_CURRENCY", doc) # 不存在则赋值为空字符串 issue_cur = query_res if query_res is not None else "" print(issue_cur) # 输出结果:EUR
注意:不建议使用无指定异常类型的裸
except写法,会吞掉JSON格式错误、路径不存在等非预期异常,增加排查难度。
内容的提问来源于stack exchange,提问作者Bruno Lorena
相关产品推荐
相关产品推荐

