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

调用第三方API返回JSON为List而非Dict的问题求助

问题:第三方API返回List类型JSON,无法提取指定字段

从第三方服务商获取JSON数据时,返回格式为list类型而非预期的dict类型,导致无法正常提取accountNo字段。

请求与解析代码

def bal(number, token):
    headers = {
        'Authorization': 'Bearer ' + token,
        'Accept': 'application/json'
    }

    response = requests.get('https://api.provider.com/idS' + number, headers=headers)
    return response.json()

# parsing json
def parce_bal(jsonnn):
    f = json.dumps(jsonnn)
    f = json.loads(f)

    #for key,value in f.item():
    #    if key is 'accountNo':
    #        out_date = value
    
    out_date = type(f)
    return out_date
balance_json = balance(numberPhone, token)
f = parce_balane(balance_json)

运行结果

PS W:\Python\MTS> & W:/Python/P3.10/python.exe w:/Python/Mobile/main.py    <class 'list'>

解决方案

1. 问题原因

第三方API返回的JSON本身是数组结构(对应Python的list),而非单个对象(对应Python的dict)。数组中通常包含一个或多个字典元素,每个元素对应一条业务数据。

2. 修正代码并提取字段

先修正代码中的拼写错误(bal被误写为balance、parce_bal被误写为parce_balane),同时去掉不必要的json.dumps+json.loads重复解析操作,直接处理response.json()返回的Python对象:

import requests

def get_balance(number, token):
    headers = {
        'Authorization': f'Bearer {token}',
        'Accept': 'application/json'
    }
    response = requests.get(f'https://api.provider.com/idS{number}', headers=headers)
    # 打印返回内容,确认数组内的元素结构
    print("API返回结构:", response.json())
    return response.json()

def parse_balance(json_data):
    # 处理列表类型的返回结果
    if isinstance(json_data, list):
        # 场景1:列表中只有一个账户数据
        if len(json_data) > 0:
            account_no = json_data[0].get('accountNo')
            return account_no
        else:
            return None
        # 场景2:列表中有多个账户数据,遍历处理
        # for item in json_data:
        #     print("账户号:", item.get('accountNo'))
    # 兼容未来可能返回字典的情况
    elif isinstance(json_data, dict):
        return json_data.get('accountNo')
    else:
        return None

# 调用示例
balance_data = get_balance(numberPhone, token)
target_account_no = parse_balance(balance_data)
print("提取的账户号:", target_account_no)

3. 关键注意事项

  • 判断字符串键时用==而非is(is用于判断对象身份,==用于判断值相等)
  • 字典遍历方法是dict.items(),而非dict.item()(缺少复数后缀s)
  • 用dict.get(key)代替直接取值dict[key],可避免键不存在时抛出异常

内容的提问来源于stack exchange,提问作者Cycl1k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:15:30