将数据从 JSON 文件导入 R

有没有一种方法可以将数据从 JSON 文件导入到 R 中?更具体地说,该文件是一个包含字符串字段、对象和数组的 JSON 对象数组。RJSON 包对于如何处理这个 http://cran.r-project.org/web/packages/rjson/rjson.pdf不是很清楚。

272929 次浏览

首先安装 rjson软件包:

install.packages("rjson")

然后:

library("rjson")
json_file <- "http://api.worldbank.org/country?per_page=10&region=OED&lendingtype=LNX&format=json"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

更新: since version 0.2.1

json_data <- fromJSON(file=json_file)

要转换嵌套列表,lapplication 可以提供以下帮助:

l <- fromJSON('[{"winner":"68694999",  "votes":[
{"ts":"Thu Mar 25 03:13:01 UTC 2010", "user":{"name":"Lamur","user_id":"68694999"}},
{"ts":"Thu Mar 25 03:13:08 UTC 2010", "user":{"name":"Lamur","user_id":"68694999"}}],
"lastVote":{"timestamp":1269486788526,"user":
{"name":"Lamur","user_id":"68694999"}},"startPrice":0}]'
)
m <- lapply(
l[[1]]$votes,
function(x) c(x$user['name'], x$user['user_id'], x['ts'])
)
m <- do.call(rbind, m)

在你的例子中提供关于投票的信息。

如果 URL 是 https,就像用于 AmazonS3一样,那么使用 getURL

json <- fromJSON(getURL('https://s3.amazonaws.com/bucket/my.json'))

jsonlite将把 JSON 导入到数据框架中。它可以选择性地压平嵌套对象。嵌套数组将是数据帧。

> library(jsonlite)
> winners <- fromJSON("winners.json", flatten=TRUE)
> colnames(winners)
[1] "winner" "votes" "startPrice" "lastVote.timestamp" "lastVote.user.name" "lastVote.user.user_id"
> winners[,c("winner","startPrice","lastVote.user.name")]
winner startPrice lastVote.user.name
1 68694999          0              Lamur
> winners[,c("votes")]
[[1]]
ts user.name user.user_id
1 Thu Mar 25 03:13:01 UTC 2010     Lamur     68694999
2 Thu Mar 25 03:13:08 UTC 2010     Lamur     68694999

首先安装 RJSONIO 和 RCurl 包:

install.packages("RJSONIO")
install.packages("(RCurl")

在控制台中使用 RJSONIO 尝试下面的代码

library(RJSONIO)
library(RCurl)
json_file = getURL("https://raw.githubusercontent.com/isrini/SI_IS607/master/books.json")
json_file2 = RJSONIO::fromJSON(json_file)
head(json_file2)

包装:

  • 图书馆(httr)
  • 库(jsonlite)

我在将 json 转换为 dataframe/csv 时遇到了一些问题:

Token <- "245432532532"
source <- "http://......."
header_type <- "applcation/json"
full_token <- paste0("Bearer ", Token)
response <- GET(n_source, add_headers(Authorization = full_token, Accept = h_type), timeout(120), verbose())
text_json <- content(response, type = 'text', encoding = "UTF-8")
jfile <- fromJSON(text_json)
df <- as.data.frame(jfile)

然后从 df 到 csv。

在这种格式下,如果需要,可以很容易地将其转换为多个.csv。

重要的是内容函数应该具有 type = 'text'

导入超文本传输软件包

library(httr)

查一下网址

url <- "http://www.omdbapi.com/?apikey=72bc447a&t=Annie+Hall&y=&plot=short&r=json"
resp <- GET(url)

以文本形式打印 resp 的内容

content(resp, as = "text")

打印信息内容

content(resp)

使用 content ()获取 resp 的内容,但是这次不指定 第二个论点。 R 自动计算出你正在处理 并将 JSON 转换为命名的 R 列表。