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
相关产品推荐
相关产品推荐

