You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用Jmespath查询JSON中符合指定_tradeIdScheme条件的所有值

问题分析:JMESPath无法获取全部匹配的#value字段值的原因

你的代码存在两处问题:

  • JMESPath查询语句没有显式提取目标字段,也没有展平嵌套数组,返回的是嵌套的符合条件的tradeId对象数组,而非直接的#value值列表
  • 使用append方法追加查询结果,会把每次查询得到的数组作为单个元素塞入目标列表,导致结果多层嵌套,看起来只能拿到单个值

正确的JMESPath查询语句

trade.tradeHeader.partyTradeIdentifier[].tradeId[?_tradeIdScheme == 'mhi:MUREX'].[#value][]

各部分作用说明:

  1. partyTradeIdentifier[]:展开partyTradeIdentifier数组层级
  2. tradeId[?_tradeIdScheme == 'mhi:MUREX']:过滤出tradeId数组中_tradeIdScheme符合要求的对象
  3. .[#value]:提取每个匹配对象的#value字段,生成子数组
  4. 末尾的[]:将嵌套的子数组展平,得到一维的目标值列表

修正后的完整代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:45:04