【问题标题】:syntax for jsonlite::fromJSON() or malformed JSON data?jsonlite::fromJSON() 或格式错误的 JSON 数据的语法?
【发布时间】:2015-11-05 08:35:15
【问题描述】:

我正在读取 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 的值是日期和值的串联版本。我期待这样的事情:

  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 是否不正确,是否需要预处理 jsontxt,或者完全是别的什么?

我试过了:

fromJSON(jsontxt,simplifyVector = FALSE)

但它返回一个列表而不是我需要的数据框。我也试过不使用 flatten=TRUE 参数,这并没有影响输出。

【问题讨论】:

    标签: json r jsonlite


    【解决方案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)
    

    【讨论】:

    • 它适用于我提供的示例数据集,但一般来说,它不能很好地处理带有间歇性 NULL 的“真实”数据。在我能够更好地理解问题并继续前进之前,我还有一些工作要做,但是这个解决方案让我朝着正确的方向开始,所以谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多