Analyser JSON avec R

90

Je suis assez nouveau sur R, mais plus je l'utilise, plus je vois à quel point il est vraiment puissant sur SAS ou SPSS. Selon moi, l'un des principaux avantages est la possibilité d'obtenir et d'analyser des données sur le Web. J'imagine que c'est possible (et peut-être même simple), mais je cherche à analyser les données JSON qui sont publiquement disponibles sur le Web. Je ne suis pas du tout un programmeur, donc toute aide et instruction que vous pouvez fournir sera grandement appréciée. Même si vous m'indiquez un exemple de travail de base, je peux probablement y travailler.

Btibert3
la source

Réponses:

89

RJSONIO d'Omegahat est un autre package qui fournit des fonctionnalités pour lire et écrire des données au format JSON.

rjson n'utilise pas les méthodes S4 / S3 et n'est donc pas facilement extensible, mais toujours utile. Malheureusement, il n'utilise pas d'opérations vectorisées et est donc trop lent pour les données non triviales. De même, pour la lecture de données JSON dans R, elle est quelque peu lente et ne s'adapte donc pas à des données volumineuses, si cela pose un problème.

Mise à jour (nouveau package 03/12/2013):

jsonlite : Ce paquet est un fork du RJSONIOpaquet. Il s'appuie sur l'analyseur de RJSONIOmais implémente un mappage différent entre les objets R et les chaînes JSON. Le code C de ce package provient principalement du RJSONIOpackage, le code R a été réécrit à partir de zéro. En plus des remplacements instantanés pour fromJSONet toJSON, le package dispose de fonctions pour sérialiser les objets. En outre, le package contient de nombreux tests unitaires pour s'assurer que tous les cas de périphérie sont codés et décodés de manière cohérente pour une utilisation avec des données dynamiques dans les systèmes et les applications.

rcs
la source
3
J'ai trouvé cette comparaison de rjson, RJSONIO et jsonlite utile
Eric
2
Le lien de comparaison ci-dessus est mort. Est- ce le bon lien? (la différence est https)
woodvi
58

Le package jsonlite est facile à utiliser et tente de convertir json en trames de données.

Exemple:

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
la source
1
C'était incroyablement facile à utiliser pour ce dont j'avais besoin. Merci beaucoup
Codeur inconnu
document <- fromJSON (fichier = url); #but la demande
expire
1
Aime ça. Semble beaucoup mieux que le désordre créé par rjson.
randominstanceOfLivingThing
1
À moins que le format json original ne soit déjà aplati, il jsonliteest plus ou moins aussi utile qu'une fourchette pour manger de la soupe.
gented
19

Voici l'exemple manquant

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')
Leeth
la source
2
cela a fonctionné pour moi mais vous ne voulez pas passer une chaîne pour le nom de la variable de fichier comme indiqué.
mrjrdnthms
4

La fonction fromJSON () dans RJSONIO, rjson et jsonlite ne renvoie pas un simple data.frame 2D pour les objets json imbriqués complexes.

Pour surmonter cela, vous pouvez utiliser tidyjson . Il prend un json et retourne toujours un data.frame. Il n'est actuellement pas disponible dans CRAN, vous pouvez l'obtenir ici: https://github.com/sailthru/tidyjson

Mise à jour: tidyjson est maintenant disponible dans cran, vous pouvez l'installer directement en utilisantinstall.packages("tidyjson")

pauljeba
la source
2

Pour mémoire, rjson et RJSONIO changent le type de fichier, mais ils n'analysent pas vraiment en soi. Par exemple, je reçois des données MongoDB laides au format JSON, je les convertis avec rjson ou RJSONIO, puis j'utilise unlist et des tonnes de corrections manuelles pour les analyser en une matrice utilisable.

Jason
la source
1

Essayez le code ci-dessous 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)
Moby M
la source