在R语言中如何将嵌套JSON对象的data字段转换为数据框
报错原因
报错由两类结构问题共同导致:一是v2$data中存在未展开的嵌套子列表,二是business、facebook_page等字段为NULL(长度为0),和其他长度为1的字段行数不匹配,as.data.frame无法对齐维度。
可行解决方案
方案1:仅用jsonlite包处理(无需额外依赖)
在解析JSON时直接开启嵌套结构自动打平,同时替换所有NULL值为NA即可:
library(jsonlite) # 解析时开启flatten自动打平嵌套结构 v2 <- fromJSON(v1, flatten = TRUE) # 将所有NULL值替换为长度为1的NA,保证所有字段长度一致 v2$data <- lapply(v2$data, function(x) if(is.null(x)) NA else x) # 成功转为数据框 df <- as.data.frame(v2$data)
效果说明:嵌套字段会自动以父键.子键的格式生成列名,比如profile_picture.normal、figures.followers,所有NULL字段会转为NA填充。
方案2:结合purrr/tidyr处理(适合批量处理多份同结构JSON场景)
如果后续需要批量解析多个同类JSON,用扁平化+宽表转换的方式兼容性更强:
library(jsonlite) library(tidyr) library(tibble) v2 <- fromJSON(v1) # 先把所有嵌套元素展开,NULL替换为NA,再转成宽表格式 df <- unlist(lapply(v2$data, function(x) if(length(x) == 0) NA else x)) |> enframe() |> pivot_wider(names_from = name, values_from = value)
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

