Импорт данных из файла JSON в R

Есть ли способ импортировать данные из файла JSON в R? Более конкретно, файл представляет собой массив объектов JSON со строковыми полями, объектами и массивами. Пакет RJSON не очень понятен, как справиться с этим http://cran.r-project.org/web/packages/rjson/rjson.pdf.

Ответ 1

Сначала установите пакет rjson:

install.packages("rjson")

Тогда:

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

Обновление: с версии 0.2.1

json_data <- fromJSON(file=json_file)

Ответ 2

jsonlite импортирует JSON в фрейм данных. Он может произвольно сгладить вложенные объекты. Вложенными массивами будут кадры данных.

> 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

Ответ 3

Альтернативный пакет - RJSONIO. Чтобы преобразовать вложенный список, lapply может помочь:

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)

дает информацию о голосах в вашем примере.

Ответ 4

Если URL-адрес https, например, используется для Amazon S3, используйте getURL

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

Ответ 5

Сначала установите пакет RJSONIO и RCurl:

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

Ответ 6

пакеты:

  • библиотека (HTTR)
  • библиотека (jsonlite)

У меня были проблемы с преобразованием JSON в dataframe/CSV. Для моего случая я сделал:

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)

затем от df до csv.

В этом формате должно быть легко преобразовать его в несколько .csvs, если это необходимо.

Важной частью является то, что функция содержимого должна иметь type = 'text'.

Ответ 7

импортировать пакет httr

library(httr)

Получить URL

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

Напечатайте содержание как текст

content(resp, as = "text")

Распечатать содержание респ

content(resp)

Используйте content() для получения содержимого resp, но на этот раз не указывайте второй аргумент. R автоматически выясняет, что вы имеете дело с JSON, и преобразует JSON в именованный список R.