如何使用jsonlite与tidyverse将含数组的JSON转为R DataFrame
将嵌套JSON转换为R DataFrame(每行对应单个session记录)
需求说明
需要把包含嵌套sessions数组的JSON数据转换为R DataFrame,要求每个sessions子项对应DataFrame的一行,同时保留所属的assessment字段信息。
实现方案(使用jsonlite和tidyverse)
以下是完整的实现步骤:
- 安装并加载依赖库
如果尚未安装jsonlite和tidyverse,先执行安装命令:
install.packages(c("jsonlite", "tidyverse"))
加载库:
library(jsonlite) library(tidyverse)
- 读取JSON数据
你可以直接读取本地JSON文件,或者将JSON字符串转为R对象:
- 读取本地文件:
json_data <- fromJSON("your_file.json")
- 直接使用示例JSON字符串:
json_str <- '[ { "assessment": "AWS - Application Development", "sessions": [ { "percentile": 0.0739025, "date_completed": "2021-10-20T20:58:33+00:00" }, { "percentile": 0.0745573, "date_completed": "2021-07-14T09:58:17+00:00" } ] }, { "assessment": "AWS - Big Data", "sessions": [ { "percentile": 0.075069, "date_completed": "2021-07-14T08:58:24+00:00" }, { "percentile": 0.426306, "date_completed": "2021-10-20T19:46:42+00:00" } ] } ]' json_data <- fromJSON(json_str)
- 展平嵌套数据生成目标DataFrame
使用tidyverse中的unnest()函数将嵌套的sessions列展开,每行对应一个session记录:
target_df <- json_data %>% unnest(sessions, keep_empty = FALSE)
- 查看结果
执行print(target_df)即可得到符合要求的DataFrame,格式如下:
# A tibble: 4 × 3 assessment percentile date_completed <chr> <dbl> <chr> 1 AWS - Application Development 0.0739 2021-10-20T20:58:33+00:00 2 AWS - Application Development 0.0746 2021-07-14T09:58:17+00:00 3 AWS - Big Data 0.0751 2021-07-14T08:58:24+00:00 4 AWS - Big Data 0.426 2021-10-20T19:46:42+00:00
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

