尝试从curlPerform()
或检索数据时,我遇到了 JSON 字符串中的字符大小限制getURL()
。这是不可重现的代码 [1],但它应该可以解决这个问题。
# Note that .base.url is the basic url for the API, q is a query, user
# is specified, etc.
session = getCurlHandle()
curl.opts <- list(userpwd = paste(user, ":", key, sep = ""),
httpheader = "Content-Type: application/json")
request <- paste(.base.url, q, sep = "")
txt <- getURL(url = request, curl = session, .opts = curl.opts,
write = basicTextGatherer())
或者
r = dynCurlReader()
curlPerform(url = request, writefunction = r$update, curl = session,
.opts = curl.opts)
我的猜测是or文本处理程序对象中的update
orvalue
函数在处理大字符串时遇到了问题。在此示例中,将返回大约 2 MB 的截断字符串。上面给出的代码适用于 < 2 MB 的查询。basicTextGather
dynCurlReader
r$value()
请注意,我可以轻松地从命令行(或system()
在 R 中使用)执行以下操作,但如果我在 R 中进行后续分析,则写入磁盘似乎是一种浪费。
curl -v --header "Content-Type: application/json" --user username:register:passwd https://base.url.for.api/getdata/select+*+from+sometable > stream.json
其中stream.json
是大约 14MB 的 json 字符串。我可以使用任一方法将字符串读入 R
con <- file(paste(.project.path, "data/stream.json", sep = ""), "r")
string <- readLines(con)
或直接列为
tmp <- fromJSON(file = paste(.project.path, "data/stream.json", sep = ""))
任何想法都非常感谢。
瑞安
[1] - 很抱歉没有提供可重现的代码,但我正在处理政府防火墙。