jsonlite 正在创建一个 data.frame 列 class data.frame

jsonlite is creating a data.frame with a column of class data.frame

我的 json 文件正在被 json_lite::read_json() 作为列表读入 R。

要重现我的问题,请将以下代码从任何文本编辑器保存为 .json 文件,然后可以将该文件读入 R。

{
"data": [
{
"type": "invite",
"send_date": "2018-05-01"
},
{
"type": "reminder",
"send_date": "2018-05-03",
"tokens": {
"email_subject": "REMINDER: Franchise Exit Survey"
}
},
{
"type": "reminder",
"send_date": "2018-05-07",
"tokens": {
"email_subject": "REMINDER: Franchise Exit Survey"
}
}
],
"relationships": {
"invitee": {
"data": {
"id": "b292aa38"
}
}
}
}

可以将json文件读入R

library(jsonlite)
library(dplyr)
library(readr)

file_json <- "json_saved_from_text_editor.json"

l_json <- read_json(file_json, simplifyVector = TRUE) 

# to view the data.frame portion of l_json whose third column is itself a data.frame:
l_json[[1]]

此列表的第一个元素属于 class data.frame,其第三列也属于 class data.frame。我曾在 tibbles 中使用列表列,但从未遇到过 data.frame 和 class data.frame 列。重要的是,class data.frame 的这一列与我遇到的任何其他列 class 的行为非常不同。它不能被取消嵌套,它的值对整个 data.frame 的维度敏感。

有没有办法操纵、创建或避免此 data.frame class 列?

我的最终目标是能够从数据帧重新创建这个小 json 文件。但我不知道如何操作或创建这些 data.frame 列。

您需要处理嵌套在 json 中的几个位置。为了方便起见,我将 df$data 中的实际数据保存为 df_data,其中有一列 tokens,它本身是一列 email_subject 的数据帧。如果您 运行 df_data %>% pull(tokens) %>% pull(email_subject),您将获得电子邮件主题行的矢量,您可以将其放入新的数据框中。

df_data <- df$data

df_fix <- bind_cols(
    df_data %>% select(type, send_date),
    email_subject = df_data %>% pull(tokens) %>% pull(email_subject)
)

输出如下所示:

      type  send_date                   email_subject
  invite   2018-05-01                            <NA>
  reminder 2018-05-03 REMINDER: Franchise Exit Survey
  reminder 2018-05-07 REMINDER: Franchise Exit Survey