如何在 R 中转换 JSON 列表并将其转换为 table
How to turn a JSON list and convert it to table in R
您好,我使用 httr 库从 API 中获取了一些数据。使用此代码
library(httr)
library(stringr)
library(tidyverse)
library(bigrquery)
#install.packages("rrapply")
library(rrapply)
URL <- "https://api.maropost.com/accounts/2116/campaigns/4503/open_report.json?unique=true&auth_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&from=2021-12-01&to=2021-12-31"
data <- GET(URL)
response <- content(data)
my_data <- rrapply(response, how = "melt")
我正在尝试将响应(一个 json 列表转换为数据框
但是使用我的代码,我得到了一个具有这种结构的数据框
> my_data
L1 L2 value
1 1 account_id 2116
2 1 campaign_id 4503
3 1 contact_id 287529
4 1 email xxxxxxx@yahoo.com
5 1 browser Unknown
6 1 open_count 1
7 1 recorded_at 2021-12-06T21:51:03.000-05:00
8 1 total_pages 13
9 1 uid NULL
10 2 account_id 2116
11 2 campaign_id 4503
12 2 contact_id 362856
13 2 email xxxxxxxxxxxxxx@yahoo.com
14 2 browser Unknown
15 2 open_count 1
16 2 recorded_at 2021-12-04T11:40:51.000-05:00
17 2 total_pages 13
18 2 uid NULL
这与我需要的很接近,但是每个 L2 值都是一列,L1 值为 1 将是一行,依此类推,每行的值都是值列的值,所以实际上那个样本只有 2 行
有没有办法从我所拥有的东西中做到这一点?
谢谢
根据你的建议,我使用了 jsonlite 包,这真的很简单
这个游戏是我需要的结果
library(httr)
library(stringr)
library(tidyverse)
library(bigrquery)
#install.packages("rrapply")
library(rrapply)
URL <- "https://api.maropost.com/accounts/2116/campaigns/4503/open_report.json?unique=true&auth_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-ezmOaC95_Xsi_G03CGJXeg&from=2021-12-01&to=2021-12-31&per=50000"
library(jsonlite)
data3 <- fromJSON(URL, flatten = TRUE)
write.csv(as.data.frame(data3),"results.csv", col.names = TRUE)
像这样的东西应该有用。
response_1 <- fromJSON(httr::content(response , as = "text", encoding = "UTF-8"))
list_cols_you_want <- c("","")
response_with_selected_cols <- lapply(response_1 , function(x) x[names(x) %in% list_cols_you_want ])
response_with_selected_cols %>%
map(data.table::as.data.table) %>%
data.table::rbindlist(fill = TRUE)
您好,我使用 httr 库从 API 中获取了一些数据。使用此代码
library(httr)
library(stringr)
library(tidyverse)
library(bigrquery)
#install.packages("rrapply")
library(rrapply)
URL <- "https://api.maropost.com/accounts/2116/campaigns/4503/open_report.json?unique=true&auth_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&from=2021-12-01&to=2021-12-31"
data <- GET(URL)
response <- content(data)
my_data <- rrapply(response, how = "melt")
我正在尝试将响应(一个 json 列表转换为数据框
但是使用我的代码,我得到了一个具有这种结构的数据框
> my_data
L1 L2 value
1 1 account_id 2116
2 1 campaign_id 4503
3 1 contact_id 287529
4 1 email xxxxxxx@yahoo.com
5 1 browser Unknown
6 1 open_count 1
7 1 recorded_at 2021-12-06T21:51:03.000-05:00
8 1 total_pages 13
9 1 uid NULL
10 2 account_id 2116
11 2 campaign_id 4503
12 2 contact_id 362856
13 2 email xxxxxxxxxxxxxx@yahoo.com
14 2 browser Unknown
15 2 open_count 1
16 2 recorded_at 2021-12-04T11:40:51.000-05:00
17 2 total_pages 13
18 2 uid NULL
这与我需要的很接近,但是每个 L2 值都是一列,L1 值为 1 将是一行,依此类推,每行的值都是值列的值,所以实际上那个样本只有 2 行
有没有办法从我所拥有的东西中做到这一点?
谢谢
根据你的建议,我使用了 jsonlite 包,这真的很简单
这个游戏是我需要的结果
library(httr)
library(stringr)
library(tidyverse)
library(bigrquery)
#install.packages("rrapply")
library(rrapply)
URL <- "https://api.maropost.com/accounts/2116/campaigns/4503/open_report.json?unique=true&auth_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-ezmOaC95_Xsi_G03CGJXeg&from=2021-12-01&to=2021-12-31&per=50000"
library(jsonlite)
data3 <- fromJSON(URL, flatten = TRUE)
write.csv(as.data.frame(data3),"results.csv", col.names = TRUE)
像这样的东西应该有用。
response_1 <- fromJSON(httr::content(response , as = "text", encoding = "UTF-8"))
list_cols_you_want <- c("","")
response_with_selected_cols <- lapply(response_1 , function(x) x[names(x) %in% list_cols_you_want ])
response_with_selected_cols %>%
map(data.table::as.data.table) %>%
data.table::rbindlist(fill = TRUE)