R调用世界银行Microdata REST API时nation筛选参数失效问题
问题根因
你对接口的传参方式理解有误:
- 文档中给出的JSON结构不是GET请求的URL查询参数,而是POST请求的JSON格式请求体。你用GET方法把
nation等字段拼在URL查询串里传递,接口完全不会识别这些过滤规则,直接触发默认返回逻辑:按国家名称首字母排序,返回全量数据集的前15条,所以前几条全是阿富汗的数据。 - 你给不需要过滤的字段传空字符串的写法也有问题,空值不会被接口当作有效过滤条件,反而会覆盖可能的默认匹配规则。
正确调用方式
用POST方法发送请求,将过滤条件封装为JSON格式放在请求体中即可,不需要的过滤字段直接省略,不要传空值。参考可运行代码:
library(httr) # 仅传入需要生效的过滤条件 search_filter <- list( nation = "Malawi" ) # 发起POST请求 resp <- POST( url = "http://microdata.worldbank.org/index.php/api/catalog/search", body = search_filter, encode = "json" # 自动将R列表序列化为JSON,设置正确的请求头 ) # 验证请求状态 status_code(resp) # 返回200即为请求成功 # 解析返回内容 result <- content(resp) # 提取返回条目验证,所有条目的nation字段均为马拉维 head(sapply(result$result$rows, `[[`, "nation"))
补充说明
- 国家名称参数需要传首字母大写的官方全称,小写格式、ISO三位国家代码均不会被接口识别。
- 如果需要调整返回条数、页码,可以在请求体中额外添加
per_page(单页返回条数)、page(页码)参数,例如per_page = 100即可单次请求最多返回100条结果。 - 接口也支持GET请求传参,但需要将完整JSON过滤条件作为
filter参数的值传递,写法冗余易出错,不推荐使用。
内容的提问来源于stack exchange,提问作者madmat
相关产品推荐
相关产品推荐

