2010-01-14 16 views
74

Sono abbastanza nuovo per R, ma più lo uso, più vedo quanto sia potente su SAS o SPSS. Solo uno dei maggiori vantaggi, come li vedo, è la possibilità di ottenere e analizzare i dati dal web. Immagino che questo sia possibile (e forse anche semplice), ma sto cercando di analizzare i dati JSON che sono disponibili pubblicamente sul web. Non sono programmatore da nessuna parte, quindi qualsiasi aiuto e istruzione che puoi fornire sarà molto apprezzato. Anche se mi indichi un esempio di lavoro di base, probabilmente posso lavorarci sopra.Parse JSON con R

risposta

78

RJSONIO di Omegahat è un altro pacchetto che fornisce funzionalità per la lettura e la scrittura di dati in formato JSON.

rjson non utilizza i metodi S4/S3 e quindi non è facilmente estensibile, ma comunque utile. Sfortunatamente, non ha usato operazioni vettorializzate e quindi è troppo lento per dati non banali. Allo stesso modo, per leggere i dati JSON in R, è un po 'lento e quindi non si adatta a grandi quantità di dati, se questo dovesse essere un problema.

Aggiornamento (nuovo pacchetto 2013/12/03):

jsonlite: Questo pacchetto è un fork del pacchetto RJSONIO. Si basa sul parser da RJSONIO, ma implementa una mappatura diversa tra oggetti R e stringhe JSON. Il codice C in questo pacchetto è principalmente dal pacchetto RJSONIO, il codice R è stato riscritto da zero. Oltre alle sostituzioni drop-in per fromJSON e toJSON, il pacchetto ha funzioni per serializzare oggetti. Inoltre, il pacchetto contiene molti test unitari per assicurarsi che tutti i casi limite siano codificati e decodificati in modo coerente per l'uso con dati dinamici in sistemi e applicazioni.

+3

ho trovato [questo confronto] (http://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html) di rjson, RJSONIO, e jsonlite disponibile – Eric

+1

Il link confronto di cui sopra è morto. È [questo] (https://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html) il link corretto?(la differenza è https) – woodvi

19

Ecco l'esempio manca

library(rjson) 
url <- 'http://someurl/data.json' 
document <- fromJSON(file=url, method='C') 
+2

questo ha funzionato per me ma non si vuole passare una stringa per il nome della variabile del file come mostrato. – mrjrdnthms

2

Per la cronaca, rjson e RJSONIO non modificare il tipo di file, ma in realtà non parsing di per sé. Per esempio, ricevo brutti dati MongoDB in formato JSON, lo converto con rjson o RJSONIO, quindi uso unlist e tonnellate di correzione manuale per analizzarlo effettivamente in una matrice utilizzabile.

42

Il pacchetto jsonlite è facile da utilizzare e tenta di convertire JSON in frame di dati.

Esempio:

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) 
+1

Questo è stato incredibilmente facile da usare per quello di cui avevo bisogno. Grazie mille –

+0

documento <- fromJSON (file = url); #ma la richiesta scade – EngrStudent

+1

Love this. Sembra molto meglio della confusione creata da rjson. – randominstanceOfLivingThing

3

La funzione fromJSON() in RJSONIO, rjson e jsonlite non restituiscono un semplice data.frame 2D per complessi oggetti JSON nidificati.

Per superare questo è possibile utilizzare tidyjson. Ci vuole un json e restituisce sempre un data.frame. Al momento non è availble in CRAN, si può ottenere qui: https://github.com/sailthru/tidyjson

Aggiornamento: tidyjson è ora disponibile in Cran, è possibile installarlo direttamente utilizzando install.packages("tidyjson")

0

Prova sotto il codice utilizzando RJSONIO in consolle

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)