R语言将httr GET请求返回的JSON响应转换为数据框的方法
R语言HasOffers嵌套JSON响应转规整数据框实现方案
前置依赖
需要提前安装并加载3个核心包:
# 安装(仅需运行一次) install.packages(c("httr", "jsonlite", "dplyr")) # 加载 library(httr) library(jsonlite) library(dplyr)
实现步骤
- 发起接口请求并校验响应
# 替换为你的实际接口地址和请求参数 api_resp <- GET( url = "https://你的HasOffers接口域名/endpoint", query = list( Method = "Stats.getStats", NetworkId = "你的网络ID", ApiKey = "你的接口密钥", # 其他查询参数 fields = c("Stat.clicks", "Stat.conversions", "Affiliate.company") ) ) # 校验请求是否成功,失败则直接抛出错误 stop_for_status(api_resp)
- 解析并展平嵌套JSON
优先用jsonlite的自动展平特性,无需手动遍历嵌套列表:
# 解析JSON时开启flatten,自动将嵌套对象的键以.连接生成平级字段 parsed_json <- fromJSON(rawToChar(api_resp$content), flatten = TRUE) # 提取目标层级的原始数据 raw_stats <- parsed_json$data$data
- 筛选字段生成最终数据框
final_df <- raw_stats %>% # 保留所有Stat字段 + Affiliate.company字段 select(starts_with("Stat."), Affiliate.company) %>% # 可选:去掉Stat.前缀,简化列名 rename_with(.fn = ~gsub("^Stat\\.", "", .x), .cols = starts_with("Stat."))
兼容rjson的备选方案(无需jsonlite)
如果你坚持使用rjson解析,可以用base R的遍历逻辑实现:
library(rjson) parsed_json <- fromJSON(rawToChar(api_resp$content)) target_list <- parsed_json$data$data # 遍历每条记录拼接目标字段 processed_rows <- lapply(target_list, function(item) { c(item$Stat, Affiliate.company = item$Affiliate$company) }) # 列表转数据框 final_df <- do.call(rbind.data.frame, c(processed_rows, stringsAsFactors = FALSE)) # 重置行号 rownames(final_df) <- NULL
注意事项
- 如果存在缺失字段,可在生成数据框后用
tidyr::replace_na()补全缺失值 - 请求参数中的fields字段建议提前指定需要返回的Stat和Affiliate字段,减少无效数据传输
内容的提问来源于stack exchange,提问作者Juan Lozano
相关产品推荐
相关产品推荐

