如何在R中解析多层嵌套JSON文件并转换为结构化数据框
嵌套JSON转矩形数据框解决方案
你之前的方案出问题的原因是unlist会直接打散所有嵌套层级的对应关系,无法绑定城市记录对应的用户和日期信息,因此建议用tidyverse生态下的purrr包做分层遍历,代码如下:
library(jsonlite) library(tidyverse) # 读入原始JSON文件 jdata <- read_json("./raw.json") # 分层遍历提取字段,自动合并为数据框 result_df <- jdata$user_id %>% # 第一层遍历:提取所有用户ID imap_dfr(~{ user_id <- .y # 第二层遍历:提取对应用户的所有日期记录 .x$date %>% imap_dfr(~{ record_date <- .y # 提取城市字段,兼容大小写键名,无有效城市则返回NA city <- tryCatch({ tolower(names(.x)) %in% "city" %>% which() %>% {.x[[.]]} }, error = function(e) NA_character_) # 跳过无城市的无效记录 if(!is.na(city)){ tibble(user_id = user_id, date = record_date, city = city) } else { NULL } }) }) # 查看输出结果 head(result_df)
上述代码输出的是三列标准矩形数据框,包含user_id、date、city三个字段,可直接用于后续分析。如果需要处理日期格式,可额外调用lubridate::ymd()处理date列,带时分秒的日期条目也可自动识别。
内容的提问来源于stack exchange,提问作者Sescro
相关产品推荐
相关产品推荐

