Analisar JSON com R

90

Eu sou bastante novo no R, mas quanto mais uso, mais vejo como ele realmente é poderoso em relação ao SAS ou SPSS. Apenas um dos principais benefícios, a meu ver, é a capacidade de obter e analisar dados da web. Imagino que isso seja possível (e talvez até simples), mas estou procurando analisar os dados JSON que estão publicamente disponíveis na web. Eu não sou um programador de forma alguma, então qualquer ajuda e instrução que você puder fornecer serão muito apreciadas. Mesmo que você me indique um exemplo básico de trabalho, provavelmente posso trabalhar com ele.

Btibert3
fonte

Respostas:

89

RJSONIO da Omegahat é outro pacote que oferece facilidades para leitura e gravação de dados no formato JSON.

O rjson não usa métodos S4 / S3 e, portanto, não é facilmente extensível, mas ainda é útil. Infelizmente, ele não usa operações vetorizadas e, portanto, é muito lento para dados não triviais. Da mesma forma, para ler dados JSON em R, é um pouco lento e, portanto, não pode ser escalado para grandes dados, caso isso seja um problema.

Atualização (novo pacote 03-12-2013):

jsonlite : este pacote é uma bifurcação do RJSONIOpacote. Ele se baseia no analisador, RJSONIOmas implementa um mapeamento diferente entre objetos R e strings JSON. O código C neste pacote é principalmente do RJSONIOPacote, o código R foi reescrito do zero. Além de substituições drop-in para fromJSONe toJSON, o pacote tem funções para serializar objetos. Além disso, o pacote contém muitos testes de unidade para garantir que todos os casos extremos sejam codificados e decodificados de forma consistente para uso com dados dinâmicos em sistemas e aplicativos.

rcs
fonte
3
Achei esta comparação de rjson, RJSONIO e jsonlite útil
Eric
2
O link de comparação acima está morto. Este é o link correto? (a diferença é https)
woodvi
58

O pacote jsonlite é fácil de usar e tenta converter json em quadros de dados.

Exemplo:

library(jsonlite)

# url with some information about project in Andalussia
url <- 'http://www.juntadeandalucia.es/export/drupaljda/ayudas.json'

# read url and convert to data.frame
document <- fromJSON(txt=url)
joscani
fonte
1
Isso era incrivelmente fácil de usar para o que eu precisava. Muito obrigado
Unknown Coder
documento <- fromJSON (arquivo = url); #mas a solicitação
expirou
1
Amo isso. Parece muito melhor do que a desordem criada por rjson.
randominstanceOfLivingThing
1
A menos que o formato json original já esteja achatado, jsonliteé mais ou menos tão útil quanto um garfo para comer sopa.
acelerado em
19

Aqui está o exemplo que falta

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')
Leeth
fonte
2
isso funcionou para mim, mas você não quer passar uma string para o nome da variável do arquivo como mostrado.
mrjrdnthms
4

A função fromJSON () em RJSONIO, rjson e jsonlite não retorna um data.frame 2D simples para objetos json aninhados complexos.

Para superar isso, você pode usar o tidyjson . Ele recebe um json e sempre retorna um data.frame. Atualmente não está disponível no CRAN. Você pode obtê-lo aqui: https://github.com/sailthru/tidyjson

Atualização: o tidyjson agora está disponível no cran, você pode instalá-lo diretamente usandoinstall.packages("tidyjson")

Pauljeba
fonte
2

Para o registro, rjson e RJSONIO mudam o tipo de arquivo, mas eles realmente não analisam per se. Por exemplo, eu recebo dados feios do MongoDB no formato JSON, converto-os com rjson ou RJSONIO e, a seguir, uso não listado e toneladas de correção manual para realmente analisá-los em uma matriz utilizável.

Jason
fonte
1

Experimente o código abaixo usando RJSONIO no 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)
Moby M
fonte