将JSON文件中的数据导入R [重复]

9cbw7uwe  于 2023-02-01  发布在  其他
关注(0)|答案(7)|浏览(131)
    • 此问题在此处已有答案**:

Parse JSON with R(6个答案)
两年前关闭了。
有没有办法将JSON文件中的数据导入R中,更具体地说,该文件是一个JSON对象数组,包含字符串字段、对象和数组,RJSON包对如何处理这个http://cran.r-project.org/web/packages/rjson/rjson.pdf不是很清楚。

db2dz4w8

db2dz4w81#

首先安装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=""))
    • 更新:**自版本0.2.1起
json_data <- fromJSON(file=json_file)
f0ofjuux

f0ofjuux2#

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
332nm8kg

332nm8kg3#

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)

提供了有关示例中投票的信息。

kninwzqo

kninwzqo4#

如果URL是https,如Amazon S3所用,则使用getURL

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

06odsfpq5#

首先安装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)
xkftehaa

xkftehaa6#

加载软件包:

library(httr)
library(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'

zphenhs4

zphenhs47#

导入http包

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,并将JSON转换为一个命名的R列表。

相关问题