web-dev-qa-db-fra.com

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

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 .

150
user313967

Commencez par installer le package rjson :

install.packages("rjson")

Ensuite:

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)
171
rcs

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
78
xn.

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.

29
Karsten W.

Si l'URL est https, comme pour Amazon S3, utilisez getURL.

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

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

1
Aaron C

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)
1
Moby M

importer le paquetage httr

library(httr)

Obtenez l'URL

url <- "http://www.omdbapi.com/?apikey=72bc447a&t=Annie+Hall&y=&plot=short&r=json"
resp <- GET(url)

Imprimer le contenu de resp sous forme de texte

content(resp, as = "text")

Imprimer le contenu de resp

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.

0
Adarsh Pawar