1

尝试从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文本处理程序对象中的updateorvalue函数在处理大字符串时遇到了问题。在此示例中,将返回大约 2 MB 的截断字符串。上面给出的代码适用于 < 2 MB 的查询。basicTextGatherdynCurlReaderr$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] - 很抱歉没有提供可重现的代码,但我正在处理政府防火墙。

4

0 回答 0