186 votes

Importation de données d'un fichier JSON dans R

Existe-t-il un moyen d'importer des données d'un fichier JSON dans R ? Plus précisément, le fichier est un tableau d'objets JSON contenant des champs, des objets et des tableaux de type chaîne. Le paquet RJSON n'est pas très clair sur la façon de traiter cette situation. http://cran.r-project.org/web/packages/rjson/rjson.pdf .

0 votes

Egalement similaire à cette question : stackoverflow.com/questions/2260147/ .

0 votes

Salut Shane, j'ai essayé d'utiliser RJSON. Je suis surtout intéressé par la manipulation nécessaire des données. Voici un exemple d'un fichier JSON avec lequel je travaille. exemple. json : [{"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"}}],"lastVo‌​te":{"timestamp":126‌​9486788526,"user":{"‌​name":"Lamur","user_‌​id":"68694999"}},"st‌​artPrice":0},. ..]

1 votes

Un avertissement : Si le fichier JSON est vraiment volumineux, les bibliothèques .so ou .dll ne pourront apparemment pas le traiter. Un format préférable est NetCDF, mais certaines organisations ne sont pas conscientes de ce problème.

208voto

rcs Points 22112

Installez d'abord le rjson paquet :

install.packages("rjson")

Ensuite :

library("rjson")
json_file <- "http://webonastick.com/uscl/feeds/uscl.json.txt"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

Mise à jour : depuis la version 0.2.1

json_data <- fromJSON(file=json_file)

3 votes

Notez que l'édition fait référence à une mise à jour de la bibliothèque, et non de R. La mise à jour modifie la dernière ligne de l'exemple précédent et vous devez toujours charger la bibliothèque comme ci-dessus.

108voto

xn. Points 4122

jsonlite importera le JSON dans un cadre de données. Il peut éventuellement aplatir les objets imbriqués. Les tableaux imbriqués seront des cadres 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

1 votes

Absolument ! Il est vraiment plus facile de travailler avec des data.frames plutôt qu'avec des listes lors du filtrage des résultats !

31voto

Karsten W. Points 5450

Un paquet alternatif est RJSONIO. Pour convertir une liste imbriquée, lapply peut 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.

1 votes

x$user$name, x$user$user_id devrait maintenant être x$user['name'], x$user['user_id'] . Aussi, m <- do.call(rbind, m) pourrait être un meilleur moyen de convertir la liste en une matrice.

0 votes

Existe-t-il quelque chose comme la fonction convertToDataFrame pour JSON (comme pour le paquet XML) ?

16voto

Anthony Points 178

Si l'URL est https, comme celle utilisée pour Amazon S3, utilisez getURL.

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

11 votes

PSA : getURL est dans le paquet RCurl.

1 votes

Aussi, Error in function (type, msg, asError = TRUE) : Protocol "s3" not supported or disabled in libcurl

2voto

Jan Galkowski Points 31

Une mise en garde : Si le fichier JSON est vraiment volumineux, les bibliothèques .so ou .dll ne pourront apparemment pas le traiter. Un format préférable est NetCDF, mais certaines organisations ne sont pas conscientes de ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X