我想知道是否有一种方法可以将json数据从mysql数据库导入到rDataframe。
我有一张这样的table:
id created_at json
1 2020-07-01 {"name":"Dent, Arthur","group":"Green","age (y)":43,"height (cm)":187,"wieght (kg)":89,"sensor":34834834}
2 2020-07-01 {"name":"Doe, Jane","group":"Blue","age (y)":23,"height (cm)":172,"wieght (kg)":67,"sensor":12342439}
3 2020-07-01 {"name":"Curt, Travis","group":"Red","age (y)":13,"height (cm)":128,"wieght (kg)":47,"sensor":83287699}
我想得到'id'和'json'列。我使用rmysql包从db获取数据到rDataframe,但是这只提供了列“id”,列“json”在每行中只包含nas。
有没有办法导入/加载数据并显示json列?还有可能提取json值的“传感器”部分?
结果将是如下所示的Dataframe(df):
id json
1 {"name":"Dent, Arthur","group":"Green","age (y)":43,"height (cm)":187,"wieght (kg)":89,"sensor":34834834}
2 {"name":"Doe, Jane","group":"Blue","age (y)":23,"height (cm)":172,"wieght (kg)":67,"sensor":12342439}
3 {"name":"Curt, Travis","group":"Red","age (y)":13,"height (cm)":128,"wieght (kg)":47,"sensor":83287699}
或使用提取的值:
id sensor
1 "sensor":34834834
2 "sensor":12342439
3 "sensor":83287699
非常感谢你的建议。
2条答案
按热度按时间oknrviil1#
使用
unnest_wider
从tidyr
```library(dplyr)
con <- DBI::dbConnect(RMySQL::MySQL(), 'db_name', user = 'user', password = 'pass', host = 'hostname')
t <- tbl(con, 'table_name')
t %>%
as_tibble() %>%
transmute(j = purrr::map(json, jsonlite::fromJSON)) %>%
tidyr::unnest_wider(j)
DBI::dbDisconnect(con)
A tibble: 3 x 6
name group
age (y)
height (cm)
wieght (kg)
sensor1 Dent, Arthur Green 43 187 89 34834834
2 Doe, Jane Blue 23 172 67 12342439
3 Curt, Travis Red 13 128 47 83287699
t <- DBI::dbGetQuery(con, 'SELECT * FROM
table_name
WHERE DATE(created_at
) > NOW() - INTERVAL 1 DAY')ijnw1ujt2#
将json响应转换为Dataframe应该很简单,但是,由于json响应的结构基本上是任意的,而且您还没有向我们提供如何获得它的详细信息或它的内容的确切细节,因此不可能为您提供适用于您的特定情况的代码。但是,这是在我的一个应用程序中工作的基本过程,首先是对提供对数据库访问的api的post调用。
当然,您应该在整个过程中包含错误和状态检查。
注意:您的数据包含拼写错误。““wieght”应该是“weight”。