如何解析IMF JSON RESTful API的httr2请求结果获取数据?
IMF API响应解析解决方案
问题根源
req_perform()返回的是httr2的响应对象,并非直接可用的JSON字符串,直接传入fromJSON()会触发格式错误,必须先从响应对象中提取JSON内容。
方法一:使用httr2内置函数直接解析(推荐)
httr2自带JSON解析工具,无需额外依赖jsonlite:
library(httr2) library(tidyverse) # 发送请求并解析JSON resp <- request("http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/IFS/PCPI_IX?startPeriod=2015&endPeriod=2020") %>% req_perform() %>% resp_body_json(simplifyVector = TRUE) # 提取实际数据并转为数据框 data_df <- as.data.frame(resp$CompactData$DataSet$Series$Obs)
方法二:结合jsonlite解析
若坚持使用jsonlite,需先将响应内容转为字符串:
library(httr2) library(jsonlite) # 发送请求 resp <- request("http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/IFS/PCPI_IX?startPeriod=2015&endPeriod=2020") %>% req_perform() # 提取字符串格式的JSON后解析 json_content <- resp_body_string(resp) parsed_data <- fromJSON(json_content, simplifyVector = TRUE) # 提取数据并转为数据框 data_df <- as.data.frame(parsed_data$CompactData$DataSet$Series$Obs)
补充说明
simplifyVector = TRUE参数可将嵌套JSON结构自动转换为更易操作的扁平化格式;- IMF API返回的JSON层级较深,实际数据通常位于
CompactData$DataSet$Series$Obs路径下,可根据返回结构微调提取路径。
内容的提问来源于stack exchange,提问作者chris_chris
相关产品推荐
相关产品推荐

