使用R代码展开JSON为结构化表格并导出CSV的技术问询
R代码展开嵌套JSON为结构化表格方案
核心思路
针对嵌套JSON(尤其是answer字段包含布尔、字符、列表多类型),不能仅靠separate函数,需要结合嵌套列表展开和多类型字段统一格式化两步处理,最终生成符合要求的结构化表格。
具体实现步骤&代码
1. 加载依赖包
需要用到jsonlite读取JSON,tidyverse(含dplyr、tidyr、purrr)处理嵌套数据:
library(jsonlite) library(tidyverse)
2. 读取JSON文件
用fromJSON读取时,设置simplifyVector = FALSE保留完整嵌套结构,避免自动扁平化丢失信息:
# 替换为你的JSON文件路径 survey_data <- fromJSON("updated_survey.json", simplifyVector = FALSE)
3. 展开嵌套并整理目标字段
通过unnest_longer展开顶层的问题列表,再用map系列函数提取嵌套字段,同时统一answer的格式(列表转逗号分隔字符串,布尔/字符直接转字符型):
structured_table <- survey_data %>% # 提取顶层的name、ID,关联问题列表 transmute( name = .$name, ID = .$ID, questions = .$questions ) %>% # 把每个问题展开为单独一行 unnest_longer(questions) %>% # 提取每个问题的嵌套字段 mutate( key = map_chr(questions, ~ .x$key), title = map_chr(questions, ~ .x$title), type = map_chr(questions, ~ .x$type), category = map_chr(questions, ~ .x$category), index = map_int(questions, ~ .x$index), # 统一处理answer字段:列表转逗号分隔字符串,其他类型转字符 answer = map(questions, ~ .x$answer) %>% map_chr(function(x) { if (is.list(x)) { paste(x, collapse = ", ") } else { as.character(x) } }) ) %>% # 保留目标字段,移除临时的questions列 select(name, ID, key, title, type, answer, category, index)
4. 导出为CSV
用write_csv直接导出处理好的表格:
write_csv(structured_table, "survey_results.csv")
特殊情况处理
如果answer是带键值对的嵌套列表(比如包含label和value),可以调整answer的处理逻辑,只提取需要的内容:
answer = map(questions, ~ .x$answer) %>% map_chr(function(x) { if (is.list(x) && all(c("label", "value") %in% names(x))) { paste(x$value, collapse = ", ") } else if (is.list(x)) { paste(x, collapse = ", ") } else { as.character(x) } })
内容的提问来源于stack exchange,提问作者db2020
相关产品推荐
相关产品推荐

