【问题标题】:R data.table Efficiently parsing json data from API callR data.table 高效解析来自 API 调用的 json 数据
【发布时间】:2017-10-22 11:34:38
【问题描述】:

我正在尝试使用 API 调用下载一些数据,但我确信代码可以在很大程度上得到优化。到目前为止,我只打了 47 个这样的电话,但将来可能会达到 20000 个。这是代码。 编辑:由于不是每个人都可以访问该链接,因此我将 raw_data 保存为 R 对象在此 link 编辑结束

library(RJSONIO)
library(RCurl)
library(data.table)
url = "http://172.31.101.107:11000/wantedapi-v4.0/segments/occ4?usecache=true&responsetype=json&engine=sphinx&country=JP&showrepost=false&msa=5685-id&date=2013-10-20-2017-05-04&passkey=wanted&showstaffing=false&showanonymous=false&showbulk=false&showfree=true&showduplicate=false&showexpired=true&showaggregator=true&showactive=true&usestemming=false&market=country%2C116&methodology=available&pagesize=1000"
raw_data <- getURL(url)
# Then covert from JSON into a list in R
data1 <- fromJSON(raw_data)
data2 <- do.call(rbind, data1[[1]]$segments)
# data2 <- rbindlist(data1[[1]]$segments) #produces error
data3 <- transpose(data2)
data4 <- data.table(
                    count = data3[[1]],
                    id = data3[[2]],
                    official_Occ_code = data3[[3]],
                    translation = data3[[4]],
                    official_occ_name = data3[[5]]
                    )

【问题讨论】:

  • 感谢投反对票,无论是谁。我意识到没有密码/网络访问权限的人无法下载数据。所以我试图将“raw_data”附加为 R 对象(通过 saveRDS 保存)。另外,我正在更改代码,使其包含一个带有 2 个 API 调用的循环。
  • 使用 raw_data_object 文件,jsonlite::fromJSON(raw_data[[1]])[[c('response','segments','field')] 给你一个data.frame

标签: json r data.table rcurl rjsonio


【解决方案1】:

我没有尝试打开该文件,因为它没有扩展名且不可预览(我公司的 IT 安全小组应该感到自豪),但我使用下面的管道来处理我认为可能类似的问题问题:

library(magrittr)
library(data.table)
library(jsonlite)
library(curl)

DI <- curl::new_handle()
curl::handle_setheaders(DI,"X-API-KEY" = "my_key_for_the_API")
DI_Request <- "https://api.somewebsite.com/v1/direct-access/foobar?format=json&page=1&pagesize=10000"
curl_fetch_memory(DI_Request,DI)$content %>% 
  rawToChar() %>% 
  fromJSON(flatten = TRUE) %>% 
  setDT() -> Output_Table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多