Est-il possible d'importer des données d'un fichier JSON dans R? Plus spécifiquement, le fichier est un tableau d'objets JSON avec des champs de chaîne, des objets et des tableaux. Le paquet RJSON n'est pas très clair sur la façon de traiter cela http://cran.r-project.org/web/packages/rjson/rjson.pdf .
Commencez par installer le package rjson
:
install.packages("rjson")
Ensuite:
library("rjson")
json_file <- "http://api.worldbank.org/country?per_page=10®ion=OED&lendingtype=LNX&format=json"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))
Mise à jour: depuis la version 0.2.1
json_data <- fromJSON(file=json_file)
jsonlite
importera le JSON dans un cadre de données. Il peut éventuellement aplatir les objets imbriqués. Les tableaux imbriqués seront des trames de données.
> 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
Un autre paquet est RJSONIO. Pour convertir une liste imbriquée, lapply peut vous aider:
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)
donne des informations sur les votes dans votre exemple.
Si l'URL est https, comme pour Amazon S3, utilisez getURL.
json <- fromJSON(getURL('https://s3.amazonaws.com/bucket/my.json'))
paquets:
J'ai eu des problèmes pour convertir json en dataframe/csv. Pour mon cas j'ai fait:
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)
puis de df à csv.
Dans ce format, il devrait être facile de le convertir en plusieurs fichiers .csv si nécessaire.
La partie importante est que la fonction de contenu doit avoir type = 'text'
.
Installez d’abord les packages RJSONIO et RCurl:
install.packages("RJSONIO")
install.packages("(RCurl")
Essayez ci-dessous le code en utilisant RJSONIO dans la console
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)
library(httr)
url <- "http://www.omdbapi.com/?apikey=72bc447a&t=Annie+Hall&y=&plot=short&r=json"
resp <- GET(url)
content(resp, as = "text")
content(resp)
Utilisez content () pour obtenir le contenu de resp, mais cette fois ne spécifiez pas un second argument. R découvre automatiquement que vous utilisez un JSON et le convertit en une liste nommée R.