如何在 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)