将数据从JSON文件导入R

use*_*967 153 json r

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

rcs*_*rcs 175

首先安装rjson包:

install.packages("rjson")
Run Code Online (Sandbox Code Playgroud)

然后:

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=""))
Run Code Online (Sandbox Code Playgroud)

更新:自版本0.2.1

json_data <- fromJSON(file=json_file)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,编辑指的是对库的更新,而不是对 R 的更新。更新更改了上一个示例的最后一行,您仍然需要像上面那样加载库。 (3认同)

xn.*_*xn. 82

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
Run Code Online (Sandbox Code Playgroud)


Kar*_* W. 30

另一个包是RJSONIO.要转换嵌套列表,lapply可以帮助:

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)
Run Code Online (Sandbox Code Playgroud)

提供有关您的示例中的投票的信息.


Ant*_*ony 15

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

json <- fromJSON(getURL('https://s3.amazonaws.com/bucket/my.json'))
Run Code Online (Sandbox Code Playgroud)

  • PSA:getURL属于RCurl pacakge. (10认同)