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

Python提取JSON特定值报错:Java迁移代码获取accountId失败如何解决

问题原因
  • 变量名不匹配:你将请求返回的JSON结果赋值给了r变量,但后续提取数据时误用了未定义的data变量
  • URL参数格式错误:多参数的分隔符应该用&,而不是第二个?
  • 返回数据结构判断错误:接口返回的根路径是多个交易对手对象组成的列表,不是单个交易对手对象,直接用字符串索引列表就会触发你遇到的类型错误
  • 缺少鉴权逻辑:原Java代码携带了basic认证,你当前的Python代码没有加鉴权逻辑,大概率会请求失败

修改后的代码
import requests

# Set Up
dateinplay = "2021-09-27"
# 替换为你实际获取Jira用户名、密码的逻辑
jira_user = getJiraUser()
jira_pass = getJiraPass()

# 修正参数分隔符为&
cdwCounterparties = f"http://cdwu/cdw/counterparties/?limit=1000000&yyyy-mm-dd={dateinplay}"
# 加basic鉴权和请求状态校验,和原Java逻辑对齐
resp = requests.get(cdwCounterparties, auth=(jira_user, jira_pass))
resp.raise_for_status()
data_list = resp.json()

# 遍历所有交易对手提取符合条件的accountId
account_ids = []
for entry in data_list:
    for identifier in entry['identifiers']['identifier']:
        if identifier['accountIdType'] == 'ACCOUNTID':
            account_ids.append(identifier['accountId'])

如果你想和原Java代码一样直接用JsonPath语法,可以安装jsonpath-ng库,写法更简洁:

import requests
from jsonpath_ng import parse

# 前面请求逻辑不变
data_list = resp.json()
jsonpath_expr = parse("$..identifier[?(@.accountIdType == 'ACCOUNTID')].accountId")
account_ids = [match.value for match in jsonpath_expr.find(data_list)]

内容的提问来源于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.28 05:45:04