Importer des données d’un fichier JSON dans R

Est-il possible d’importer des données d’un fichier JSON dans R? Plus précisément, le fichier est un tableau d’objects JSON avec des champs de chaîne, des objects et des tableaux. Le paquet RJSON n’est pas très clair sur la façon de traiter ce http://cran.r-project.org/web/packages/rjson/rjson.pdf .

Installez d’abord le paquetage rjson :

 install.packages("rjson") 

Alors:

 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="")) 

Mise à jour: depuis la version 0.2.1

 json_data <- fromJSON(file=json_file) 

jsonlite importera le JSON dans un jsonlite données. Il peut éventuellement aplatir des objects nesteds. Les tableaux nesteds seront des blocs 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 package est RJSONIO. Pour convertir une liste nestede, 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.

Si l’URL est https, comme utilisée pour Amazon S3, utilisez getURL

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

Installez d’abord le paquet RJSONIO et RCurl:

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

paquets:

  • bibliothèque (httr)
  • bibliothèque (jsonlite)

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 de la fonction de contenu devrait avoir type = 'text' .

Pour importer, j’ai dû append “des marques:

json_data <- fromJSON (fichier = "fichier_json")

J’espère que ça aide quelqu’un.

Cormac