Json объектов в фрейме данных для перечисления в R - PullRequest
0 голосов
/ 26 мая 2020

У меня в файле csv есть следующее, я хотел бы преобразовать в список ..

{"received":1589294883,"guid":"0CA2F400004","eventtype":"basic","payload":{"time":1589294882,"commodity":"elec","updatetime":1589294882,"total":{"units":"kWh","cons":1625591},"status":{"disconnect":false}}}
{"received":1589294888,"guid":"0CA2F400004","eventtype":"basic","payload":{"time":1589294887,"commodity":"elec","updatetime":1589294887,"total":{"units":"kWh","cons":3769124},"status":{"disconnect":false}}}
{"received":1589294892,"guid":"0CA2F400004","eventtype":"basic","payload":{"time":1589294889,"commodity":"elec","updatetime":1589294889,"total":{"units":"kWh","cons":949678},"status":{"disconnect":false}}} 
{"received":1589294898,"guid":"0CA2F400004","eventtype":"basic","payload":{"time":1589294897,"commodity":"elec","updatetime":1589294897,"total":{"units":"kWh","cons":5137203},"status":{"disconnect":false}}}
{"received":1589294902,"guid":"0CA2F400004","eventtype":"basic","payload":{"time":1589294900,"commodity":"elec","updatetime":1589294900,"total":{"units":"kWh","cons":968410},"status":{"disconnect":false}}} 

кому-то удалось это сделать, но не показал, как. если я смогу преобразовать это в правильный формат, я смогу структурировать его, используя:

library(jsonify)
jsonify::from_json( json_file )
jsonlite::fromJSON( json_file )

Спасибо

1 Ответ

0 голосов
/ 26 мая 2020

Это будет довольно медленно, но вы можете попробовать:

do.call(rbind,lapply(readLines("example.csv"),function(x)data.frame(jsonlite::fromJSON(x))))

или даже:

jsonlite::fromJSON(paste0("[",paste0(readLines("ex.csv"),collapse = ","),"]"))

    received        guid eventtype payload.time payload.commodity payload.updatetime payload.total.units payload.total.cons payload.disconnect
1 1589294883 0CA2F400004     basic   1589294882              elec         1589294882                 kWh            1625591              FALSE
2 1589294888 0CA2F400004     basic   1589294887              elec         1589294887                 kWh            3769124              FALSE
3 1589294892 0CA2F400004     basic   1589294889              elec         1589294889                 kWh             949678              FALSE
4 1589294898 0CA2F400004     basic   1589294897              elec         1589294897                 kWh            5137203              FALSE
5 1589294902 0CA2F400004     basic   1589294900              elec         1589294900                 kWh             968410              FALSE

Если это слишком медленно, вам следует подумать о том, чтобы весь файл Json совместим. что-то вроде:

write(sprintf("[%s]",paste0(readLines("example.csv"),collapse=",")),"example1.csv")

, затем прочтите его с помощью json:

jsonlite::fromJSON("example1.csv")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...