2017-11-21 4 views
0

Ich habe ein Problem mit rjson Paket, um JSON in R data.frame zu konvertieren.JSON zu R data.frame

Ich begann mit:

library("rjson") 
json_file <- "btcusd.txt" 
json_data <- fromJSON(paste(readLines(json_file), collapse="")) 

btcusd.txt Datei enthält folgende Komponenten:

{"Response":"Success","Type":100,"Aggregated":true,"Data": 
     [{"time":1510650000,"close":6488.28,"high":6618.69,"low":6482.22,"open":6492.35,"volumefrom":9422.44,"volumeto":61626698.63}, 
     {"time":1510671600,"close":6541,"high":6592.05,"low":6487.35,"open":6549.1,"volumefrom":12618.61,"volumeto":82634018.7},], 
     "TimeTo":1511298000,"TimeFrom":1510574400,"FirstValueInArray":true,"ConversionType":{"type":"direct","conversionSymbol":""}} 

Kann mir jemand helfen, es in eine data.frame zu machen?

+0

Ich erhalte eine Fehlermeldung mit jsonlite :: fromJSON: 'Fehler: Fehler analysieren: unallowed Token an diesem Punkt in JSON Text 18.61, "volumeto": 82.634.018,7}] , "TimeTo": 1511298000, "TimeFro (hier) ------ ^' – hackR

Antwort

0

Ich würde versuchen jsonlite Paket.

Basierend auf, was Sie haben Ich würde versuchen, diese:

install.packages("jsonlite") 
library(jsonlite) 

mydata <- fromJSON("btcusd.txt") 

Aber inspizierte ich Ihre Daten und es ist chaotisch. Können Sie zusätzliche Informationen bereitstellen? Wenn das von einer API kommt, ist es vielleicht einfacher, stattdessen die XML-Version zu lesen.

+0

Vielen Dank für Ihre Antwort, hier ist die API, die ich versuchte zu verwenden: https: //min-api.cryptcompare. com/data/histominute? fsym = BTC & tsym = USD & limit = 3 & aggregate = 3 & e = CCCAGG – professorG

0

Ihr JSON-Eingang enthält ein zusätzliches Komma. Wenn Sie das Komma entfernen es funktioniert OK:

json_txt <- '{ 
    "Response": "Success", 
    "Type": 100, 
    "Aggregated": true, 
    "Data": [{ 
      "time": 1510650000, 
      "close": 6488.28, 
      "high": 6618.69, 
      "low": 6482.22, 
      "open": 6492.35, 
      "volumefrom": 9422.44, 
      "volumeto": 61626698.63 
    }, { 
      "time": 1510671600, 
      "close": 6541, 
      "high": 6592.05, 
      "low": 6487.35, 
      "open": 6549.1, 
      "volumefrom": 12618.61, 
      "volumeto": 82634018.7 
    }], 
    "TimeTo": 1511298000, 
    "TimeFrom": 1510574400, 
    "FirstValueInArray": true, 
    "ConversionType": { 
      "type": "direct", 
      "conversionSymbol": "" 
    } 
}' 
data.frame(fromJSON(json_txt)) 
+0

Danke.Das gibt mir eine 2 Zeilen data.frame, wobei die Spaltennamen "Antwort", "Typ", "Aggregiert" usw. sind Wenn ich Teile, die sie enthalten, aus dem JSON entferne, erhalte ich ein 2-Zeilen-Da ta frame, wobei Spaltennamen (wie gewünscht): "time", "close", "high", "niedrig", "offen", "volumefrom", "volumeto". Das Problem ist, dass es nur für ein Element der Zeitreihe funktioniert und ich muss dies für Hunderte von Elementen tun. – professorG