2010-01-14 13 views
74

Ich bin ziemlich neu in R, aber je mehr es verwendet, desto mehr sehe ich, wie mächtig es wirklich über SAS oder SPSS ist. Einer der wichtigsten Vorteile, wie ich sie sehe, ist die Fähigkeit, Daten aus dem Internet zu bekommen und zu analysieren. Ich stelle mir vor, dass dies möglich ist (und vielleicht sogar einfach), aber ich möchte JSON-Daten parsen, die im Internet öffentlich verfügbar sind. Ich bin kein Programmierer, also jede Hilfe und Anweisung, die Sie zur Verfügung stellen können, wird sehr geschätzt. Selbst wenn Sie mich auf ein grundlegendes Arbeitsbeispiel hinweisen, kann ich es wahrscheinlich durcharbeiten.Parse JSON mit R

Antwort

78

RJSONIO von Omegahat ist ein weiteres Paket, das Funktionen zum Lesen und Schreiben von Daten im JSON-Format bietet.

rjson verwendet keine S4/S3-Methoden und ist daher nicht leicht erweiterbar, aber immer noch nützlich. Leider verwendet es keine vektorisierten Operationen und ist daher für nicht-triviale Daten zu langsam. Ähnlich ist es beim Lesen von JSON-Daten in R etwas langsam und skaliert daher nicht zu großen Daten, falls dies ein Problem sein sollte.

aktualisieren (neue Package 2013.12.03):

jsonlite: Dieses Paket ist ein Fork des RJSONIO Paket. Es baut auf dem Parser von RJSONIO auf, implementiert jedoch eine andere Zuordnung zwischen R-Objekten und JSON-Zeichenfolgen. Der C-Code in diesem Paket stammt hauptsächlich aus dem RJSONIO Paket, der R-Code wurde von Grund auf neu geschrieben. Zusätzlich zu den Drop-In-Ersetzungen für fromJSON und toJSON verfügt das Paket über Funktionen zum Serialisieren von Objekten. Darüber hinaus enthält das Paket eine Vielzahl von Komponententests, um sicherzustellen, dass alle Edge-Cases einheitlich für die Verwendung mit dynamischen Daten in Systemen und Anwendungen codiert und decodiert werden.

+3

fand ich [dieser Vergleich] (http://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html) von rjson, RJSONIO und jsonlite hilfreich – Eric

+1

der Vergleich Link oben ist tot. Ist [das] (https://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html) der richtige Link?(Der Unterschied ist https) – woodvi

19

Hier ist das fehlende Beispiel

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

dies funktionierte für mich, aber Sie möchten nicht eine Zeichenfolge für den Namen der Dateivariablen übergeben, wie gezeigt. – mrjrdnthms

2

Für die Aufzeichnung rjson und RJSONIO Sie den Dateityp ändern, aber sie nicht wirklich analysieren per se. Zum Beispiel erhalte ich hässliche MongoDB-Daten im JSON-Format, konvertiere sie mit rjson oder RJSONIO, benutze dann unlist und tonnenweise manuelle Korrektur, um sie tatsächlich in eine brauchbare Matrix zu zerlegen.

42

Das jsonlite Paket ist einfach zu verwenden und versucht, JSON in Datenrahmen zu konvertieren.

Beispiel:

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

Das war unglaublich einfach zu benutzen für das, was ich brauchte. Vielen Dank –

+0

Dokument <- fromJSON (file = url); #aber die Anfrage läuft ab – EngrStudent

+1

Liebe das. Scheint viel besser als das von rjson geschaffene Durcheinander. – randominstanceOfLivingThing

3

Die Funktion fromJSON() in RJSONIO, rjson und jsonlite keine einfache 2D data.frame für komplexe verschachtelte JSON-Objekte zurück.

Um dies zu umgehen, können Sie ordyjson verwenden. Es nimmt einen JSON auf und gibt immer einen Datenrahmen zurück. Es ist derzeit nicht availble in CRAN, können Sie es hier: https://github.com/sailthru/tidyjson

Update: tidyjson ist jetzt in Cran verfügbar, können Sie es installieren direkt install.packages("tidyjson")

0

Versuchen unter Code mit RJSONIO in Konsole

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)