2015-11-05 1 views
0

Я читаю json-форматированный источник данных и не могу разобрать его в ядре данных, которое мне бы хотелось.синтаксис jsonlite :: fromJSON() или неверные данные JSON?

jsontxt <- '{"sitesEnergy":{"timeUnit":"DAY","unit":"Wh","count":2,"siteEnergyList":[{"siteId":159864,"energyValues":{"measuredBy":"METER","values":[{"date":"2015-09-01 00:00:00","value":2.0},{"date":"2015-09-02 00:00:00","value":2.0}]}},{"siteId":177606,"energyValues":{"measuredBy":"INVERTER","values":[{"date":"2015-09-01 00:00:00","value":null},{"date":"2015-09-02 00:00:00","value":0.0}]}}]}}' 
fromJSON(jsontxt,flatten=TRUE) 

выходы:

$sitesEnergy 
$sitesEnergy$timeUnit 
[1] "DAY" 

$sitesEnergy$unit 
[1] "Wh" 

$sitesEnergy$count 
[1] 2 

$sitesEnergy$siteEnergyList 
    siteId energyValues.measuredBy        energyValues.values 
1 159864     METER 2015-09-01 00:00:00, 2015-09-02 00:00:00, 2, 2 
2 177606    INVERTER 2015-09-01 00:00:00, 2015-09-02 00:00:00, NA, 0 

Первые семь строки вывода текста выглядят хорошо, но значение для energyValues.values ​​является каскадной версией обоего дат и значений. Я ожидаю, что Somthing так:

siteId energyValues.measuredBy energyValues.values.date energyValues.values.value 
1 159864     METER 2015-09-01 00:00:00    2 
2 159864     METER 2015-09-02 00:00:00    2 
3 177606    INVERTER 2015-09-01 00:00:00    NA 
2 177606    INVERTER 2015-09-02 00:00:00    0 

так myJSON пакет уродливы, я использую fromJSON inproperly, мне нужно Preprocess jsontxt, или это Somthing еще в целом?

Я пробовал:

fromJSON(jsontxt,simplifyVector = FALSE) 

но он возвращает список вместо dataframe, что мне нужно. Я также пробовал без использования параметра flatten = TRUE и не влиял на выход.

ответ

1

Не уверен, если это то, что вы хотите ...

library(jsonlite) 

    jsontxt <- '{"sitesEnergy":{"timeUnit":"DAY","unit":"Wh","count":2,"siteEnergyList":[{"siteId":159864,"energyValues":{"measuredBy":"METER","values":[{"date":"2015-09-01 00:00:00","value":2.0},{"date":"2015-09-02 00:00:00","value":2.0}]}},{"siteId":177606,"energyValues":{"measuredBy":"INVERTER","values":[{"date":"2015-09-01 00:00:00","value":null},{"date":"2015-09-02 00:00:00","value":0.0}]}}]}}' 
    jsontxt<-fromJSON(jsontxt,flatten=TRUE) 

    str(jsontxt[[1]][4]) 

    mydf<- jsontxt[[1]][4][[1]] 

    library(tidyr) 

    unnest(mydf, energyValues.values) 
+0

Он работает на образец набора данных я предоставил, но, в общем, он не обрабатывает «реальные» данные хорошо с прерывистым значения NULL. У меня есть немного больше работы, прежде чем я смогу понять проблему лучше и двигаться вперед, но это решение заставило меня начать в правильном направлении, поэтому спасибо! – Jonathan