在R语言中,我们经常会遇到需要从某个Web服务接口获取文件下载地址的场景。这类接口大多以JSON格式返回数据,其中嵌套了文件的真实链接。借助httr和jsonlite,可以很方便地完成请求与解析。

准备工作与包安装
开始之前,确保已安装以下两个包:
- httr:用于发送HTTP请求
- jsonlite:用于解析JSON数据
如果尚未安装,可以运行下面代码:
# 安装所需包
install.packages("httr")
install.packages("jsonlite")
发送请求并解析JSON
假设Web服务地址为 http://192.168.0.1/api/files,返回内容如下:
{
"code": 0,
"data": {
"file_list": [
{
"name": "data.csv",
"url": "http://192.168.0.1/files/data.csv"
}
]
}
}
我们用GET方法请求,并用fromJSON()解析:
library(httr)
library(jsonlite)
# 发送GET请求
resp <- GET("http://192.168.0.1/api/files")
# 检查状态码
if (status_code(resp) == 200) {
# 解析JSON文本
json_data <- fromJSON(content(resp, "text", encoding = "UTF-8"))
# 提取文件链接
file_url <- json_data$data$file_list[[1]]$url
print(file_url)
} else {
stop("请求失败,状态码: ", status_code(resp))
}
批量提取所有文件链接
当JSON里包含多个文件时,可以用循环或向量化方式提取:
# 提取全部链接 urls <- sapply(json_data$data$file_list, function(x) x$url) print(urls)
常见错误与处理
实际使用中需要注意:
- 接口可能返回HTML错误页,此时
fromJSON()会报错,应先判断content类型 - 字段名称可能与示例不同,可用
names(json_data)查看结构 - 若链接使用https且证书异常,可在GET中加
config(ssl_verifypeer = FALSE)
小结
通过上述步骤,我们完成了从Web服务获取JSON并解析出文件链接的完整过程。你也可以将提取到的链接传给download.file()实现自动下载。