使用wbgapi调用世行API遇JSON解码错误,该如何解决?
解决wbgapi调用世界银行Doing Business数据库的JSON解码错误
错误原因分析
- 国家参数格式错误:你传入的
countries是国家名称数组,但wbgapi的data.DataFrame方法要求countries参数使用ISO国家代码(如'CHN'、'USA'),而非中文/英文国家名称,API无法识别名称导致返回无效JSON。 - 请求URL过长:一次性传入所有国家(包括区域汇总代码)会生成超长URL,超出了世界银行API的URL长度限制,导致服务器返回非标准JSON,引发解码错误。
- 包含非国家的聚合体:你的请求中包含了区域/收入组代码(如AFE、AFW、ARB),这些聚合体可能没有对应指标数据,干扰了API的返回结果。
解决方案
步骤1:获取正确的国家代码列表
使用wbgapi内置方法获取所有成员国的ISO代码(自动排除区域汇总):
import wbgapi as wb # 获取所有世界银行成员国的ISO 3字母代码,排除区域/收入组聚合体 countries = wb.economies.members('WLD')
步骤2:修正数据请求代码
使用正确的国家代码调用API,若国家数量过多导致URL超长,可分批请求并合并结果:
# 直接请求(若国家数量在URL长度限制内) legal_enforcement = wb.data.DataFrame('ENF.CONT.COEN.ENFE.PR', countries, time=2017) # 若仍报错(URL过长),分批请求示例 import pandas as pd batch_size = 50 dfs = [] for i in range(0, len(countries), batch_size): batch_countries = countries[i:i+batch_size] df_batch = wb.data.DataFrame('ENF.CONT.COEN.ENFE.PR', batch_countries, time=2017) dfs.append(df_batch) # 合并所有批次结果 legal_enforcement = pd.concat(dfs)
步骤3:验证指标有效性
确认指标代码在2017年的Doing Business数据库中存在,可通过以下代码检查:
# 检查指标的可用年份(source=2对应Doing Business数据库) wb.series.info('ENF.CONT.COEN.ENFE.PR', source=2)
额外建议
- 更新wbgapi到最新版本,避免版本兼容问题:
pip install --upgrade wbgapi - 若仅需特定国家,可手动指定国家代码列表,进一步缩短请求URL长度。
内容的提问来源于stack exchange,提问作者Harshit Dandelia
相关产品推荐
相关产品推荐

