Python使用Jmespath查询JSON中符合指定_tradeIdScheme条件的所有值
问题分析:JMESPath无法获取全部匹配的
#value字段值的原因 你的代码存在两处问题:
- JMESPath查询语句没有显式提取目标字段,也没有展平嵌套数组,返回的是嵌套的符合条件的tradeId对象数组,而非直接的
#value值列表 - 使用
append方法追加查询结果,会把每次查询得到的数组作为单个元素塞入目标列表,导致结果多层嵌套,看起来只能拿到单个值
正确的JMESPath查询语句
trade.tradeHeader.partyTradeIdentifier[].tradeId[?_tradeIdScheme == 'mhi:MUREX'].[#value][]
各部分作用说明:
partyTradeIdentifier[]:展开partyTradeIdentifier数组层级tradeId[?_tradeIdScheme == 'mhi:MUREX']:过滤出tradeId数组中_tradeIdScheme符合要求的对象.[#value]:提取每个匹配对象的#value字段,生成子数组- 末尾的
[]:将嵌套的子数组展平,得到一维的目标值列表
修正后的完整代码示例
import json import jmespath import os list_mx = [] # 优先使用os.path.join拼接路径,避免不同操作系统的斜杠兼容问题 filepath = os.path.join(jsonEod, "MHEUeodTrades.json") with open(filepath, 'r', encoding='utf-8') as f: json_obj = json.load(f, strict=False) for doc in json_obj: trade_ids = jmespath.search( "trade.tradeHeader.partyTradeIdentifier[].tradeId[?_tradeIdScheme == 'mhi:MUREX'].[#value][]", doc ) # 存在匹配结果时,用extend把列表元素逐个追加到list_mx,避免嵌套 if trade_ids: list_mx.extend(trade_ids)
内容的提问来源于stack exchange,提问作者Bruno Lorena
相关产品推荐
相关产品推荐

