Importación de datos de un archivo JSON a R

¿Hay alguna manera de importar datos de un archivo JSON a R? Más específicamente, el archivo es una matriz de objetos JSON con campos de cadena, objetos y matrices. El paquete RJSON no es muy claro sobre cómo lidiar con este http://cran.r-project.org/web/packages/rjson/rjson.pdf .

Primero instale el paquete rjson :

 install.packages("rjson") 

Entonces:

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

Actualización: desde la versión 0.2.1

 json_data < - fromJSON(file=json_file) 

jsonlite importará el JSON en un dataframe. Opcionalmente puede aplanar objetos nesteds. Las matrices anidadas serán marcos de datos.

 > 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 paquete alternativo es RJSONIO. Para convertir una lista anidada, lapply puede ayudar:

 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) 

da información sobre los votos en su ejemplo.

Si la URL es https, como se usa para Amazon S3, entonces use getURL

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

Primero instale el paquete RJSONIO y RCurl:

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

paquetes:

  • biblioteca (httr)
  • biblioteca (jsonlite)

He tenido problemas al convertir json a dataframe / csv. Para mi caso lo hice:

 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) 

luego de df a csv.

En este formato, debería ser fácil convertirlo a múltiples .csvs si es necesario.

La parte importante es que la función de contenido debe tener type = 'text' .

Para importar, tuve que agregar “marcas”:

json_data < - fromJSON (file = "json_file")

Espero que ayude a alguien.

Cormac