使用变量与直接值时字典值异常导致AssetPanda API搜索失效问题
解决AssetPanda API变量传参搜索失效的问题
排查与解决思路
- 验证变量的实际值:先确认
username变量的内容和硬编码的"user.name"完全一致,避免存在空格、换行或不可见字符这类隐性差异。可以通过打印变量的原始表示来对比:username = "user.name" print(repr(username)) # 应输出 'user.name' print(repr("user.name")) - 对比JSON序列化结果:手动将两种方式生成的
data字典序列化为JSON字符串,检查是否存在格式差异——requests的json参数自动序列化时,可能因变量的隐式特性导致格式变化:import json # 硬编码版本的JSON hardcoded_json = json.dumps({ "field_filters": { "field_num": ["user.name"] } }) # 变量版本的JSON var_json = json.dumps({ "field_filters": { "field_num": [username] } }) print(hardcoded_json == var_json) # 正常应返回True - 直接传递序列化后的JSON字符串:如果发现序列化结果有差异,或者API对JSON格式有特殊要求,可以手动序列化后用
data参数发送请求,同时确保headers包含Content-Type: application/json:payload = json.dumps(data) response = requests.request('POST', APurl, headers=headers, data=payload) - 检查变量赋值逻辑:如果
username是通过其他逻辑生成(比如用户输入、数据库读取),要确认变量没有被意外修改,比如大小写变更、额外字符拼接等,赋值后立即打印变量值做校验。
函数化实现示例
确认变量传参正常后,可编写如下函数封装逻辑,同时完成响应的精简解析:
import requests import json def get_filtered_users(target_username, api_url, request_headers): # 提前校验变量值,避免无效请求 assert repr(target_username) == repr("user.name"), "目标用户名格式不符合API要求" request_data = { "field_filters": { "field_num": [target_username] } } response = requests.post(api_url, headers=request_headers, json=request_data) response.raise_for_status() # 主动捕获HTTP错误状态码 raw_response = response.json() # 解析为精简版本,示例:提取用户ID、名称核心字段 simplified_users = [ { "user_id": item.get("id"), "user_name": item.get("name") } for item in raw_response.get("data", []) ] return simplified_users
内容的提问来源于stack exchange,提问作者GooseAtCompany
相关产品推荐
相关产品推荐

