将json数据从sqldb导入到rDataframe

bbmckpt7  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(185)

我想知道是否有一种方法可以将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

非常感谢你的建议。

oknrviil

oknrviil1#

使用 unnest_widertidyr ```
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) sensor

1 Dent, Arthur Green 43 187 89 34834834
2 Doe, Jane Blue 23 172 67 12342439
3 Curt, Travis Red 13 128 47 83287699

如果只想检索过去24小时的数据(根据op的请求),请更改 `tbl(con, 'table_name')` 声明收件人:

t <- DBI::dbGetQuery(con, 'SELECT * FROM table_name WHERE DATE(created_at) > NOW() - INTERVAL 1 DAY')

ijnw1ujt

ijnw1ujt2#

将json响应转换为Dataframe应该很简单,但是,由于json响应的结构基本上是任意的,而且您还没有向我们提供如何获得它的详细信息或它的内容的确切细节,因此不可能为您提供适用于您的特定情况的代码。但是,这是在我的一个应用程序中工作的基本过程,首先是对提供对数据库访问的api的post调用。

library(httr)
library(jsonlite)

# Query the API

response <- POST(<your code here>)

# Extract the content of the response.  Amend the format an encoding if necessary.

content <- content(response, as="text", encoding="UTF-8")

# Convert the content to an R object

content <- fromJSON(content, flatten=FALSE)

# Coerce to data.frame

df <- as.data.frame(content)

当然,您应该在整个过程中包含错误和状态检查。
注意:您的数据包含拼写错误。““wieght”应该是“weight”。

相关问题