R语言从数据框列中提取非对称JSON数据的实现方案咨询
解决方案
你已经完成了JSON列的解析得到frame列表,后续可以直接基于该列表结合tidyverse工具链完成展开,操作代码如下:
- 加载依赖包
library(tidyverse)
- 合并解析结果与原表基础列
# 保留原表的id、name列,绑定解析后的JSON数据 base_df <- dataframe_example %>% select(id, name) %>% mutate(json_parsed = frame)
- 展开
_inv数组为多列
# 先全局计算_inv的最大长度,适配非固定长度场景 max_inv_length <- max(map_int(frame, ~ length(.x[["_inv"]])), na.rm = TRUE) # 处理_inv字段,不足最大长度的补NA inv_processed <- base_df %>% mutate( inv_list = map(json_parsed, ~ { inv_vec <- .x[["_inv"]] # 空数组/长度不足的统一补NA到最大长度 c(inv_vec, rep(NA_real_, max_inv_length - length(inv_vec))) }) ) %>% # 把数组展开为独立列 unnest_wider(inv_list, names_sep = "_") %>% # 重命名为要求的列名格式 rename_with(~ str_replace(.x, "inv_list_", "_inv_"), starts_with("inv_list_"))
- 提取
_person嵌套字段
# 提取_person下的_personid值,缺失值自动填NA final_result <- inv_processed %>% mutate( _person_id = map_chr(json_parsed, ~ .x[["_person"]][["_personid"]] %||% NA_character_) ) %>% # 移除中间过程列 select(-json_parsed)
运行后得到的final_result就是你需要的目标格式数据。如果需要处理其他类似的嵌套字段,只需要参考_person的提取逻辑,对应修改字段名即可。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

