Analysieren Sie JSON mit R.

90

Ich bin ziemlich neu in R, aber je mehr ich es benutze, desto mehr sehe ich, wie leistungsfähig es wirklich über SAS oder SPSS ist. Aus meiner Sicht ist nur einer der Hauptvorteile die Möglichkeit, Daten aus dem Internet abzurufen und zu analysieren. Ich stelle mir vor, dass dies möglich (und vielleicht sogar unkompliziert) ist, aber ich möchte JSON-Daten analysieren, die im Web öffentlich verfügbar sind. Ich bin kein Programmierer, daher wird jede Hilfe und Anleitung, die Sie geben können, sehr geschätzt. Selbst wenn Sie mich auf ein grundlegendes Arbeitsbeispiel verweisen, kann ich es wahrscheinlich durcharbeiten.

Btibert3
quelle

Antworten:

88

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 ohne weiteres erweiterbar, aber dennoch nützlich. Leider werden keine vektorisierten Operationen verwendet und sind daher für nicht triviale Daten zu langsam. In ähnlicher Weise ist das Einlesen von JSON-Daten in R etwas langsam und lässt sich daher nicht auf große Datenmengen skalieren, falls dies ein Problem darstellt.

Update (neues Paket 2013-12-03):

jsonlite : Dieses Paket ist eine Abzweigung des RJSONIOPakets. Es baut auf dem Parser von auf RJSONIO, implementiert jedoch eine andere Zuordnung zwischen R-Objekten und JSON-Zeichenfolgen. Der C-Code in diesem Paket stammt größtenteils aus dem RJSONIOPaket, der R-Code wurde von Grund auf neu geschrieben. Zusätzlich zu den Drop-In-Ersetzungen für fromJSONund toJSONverfügt das Paket über Funktionen zum Serialisieren von Objekten. Darüber hinaus enthält das Paket zahlreiche Komponententests, um sicherzustellen, dass alle Randfälle für die Verwendung mit dynamischen Daten in Systemen und Anwendungen konsistent codiert und decodiert werden.

rcs
quelle
3
Ich fand diesen Vergleich von rjson, RJSONIO und jsonlite hilfreich
Eric
2
Der obige Vergleichslink ist tot. Ist das der richtige Link? (der Unterschied ist https)
Woodvi
58

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)
joscani
quelle
1
Dies war unglaublich einfach zu bedienen für das, was ich brauchte. Vielen Dank
Unbekannter Coder
document <- fromJSON (file = url); #Aber die Anfrage läuft ab
EngrStudent
1
Ich liebe das. Scheint viel besser als die Unordnung von rjson.
RandominstanceOfLivingThing
1
Sofern das ursprüngliche JSON-Format nicht bereits abgeflacht ist, jsonliteist es mehr oder weniger nützlich als eine Gabel, um Suppe zu essen.
Gented
19

Hier ist das fehlende Beispiel

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')
Leeth
quelle
2
Dies hat bei mir funktioniert, aber Sie möchten keine Zeichenfolge für den Namen der Dateivariablen wie gezeigt übergeben.
Mrjrdnthms
4

Die Funktion von JSON () in RJSONIO, rjson und jsonlite gibt keinen einfachen 2D-Datenrahmen für komplexe verschachtelte json-Objekte zurück.

Um dies zu überwinden, können Sie tidyjson verwenden . Es nimmt einen JSON auf und gibt immer einen data.frame zurück. Es ist derzeit in CRAN nicht verfügbar. Sie können es hier herunterladen: https://github.com/sailthru/tidyjson

Update: tidyjson ist jetzt in cran verfügbar, Sie können es direkt mit installiereninstall.packages("tidyjson")

Pauljeba
quelle
2

Für die Aufzeichnung ändern rjson und RJSONIO den Dateityp, aber sie analysieren nicht wirklich per se. Zum Beispiel empfange ich hässliche MongoDB-Daten im JSON-Format, konvertiere sie mit rjson oder RJSONIO und verwende dann die Liste und jede Menge manuelle Korrekturen, um sie tatsächlich in eine verwendbare Matrix zu analysieren.

Jason
quelle
1

Versuchen Sie den folgenden Code mit RJSONIO in der 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)
Moby M.
quelle