如何在R中展开嵌套于大括号的JSON数据并保留test_part关联信息
解决嵌套JSON响应的展开问题
我来帮你搞定这个嵌套JSON的展开需求——你的核心问题是responses列里存的是JSON格式的字符串,而非已经解析好的JSON对象,所以直接用flatten=TRUE没法自动展开它。我们需要把这些字符串逐个解析成结构化数据,再和对应的test_part绑定起来,确保每个问题响应都能关联到所属的测试部分。
下面是完整的解决方案,用tidyverse和jsonlite配合实现:
完整代码示例
library(jsonlite) library(tidyverse) # 读取原始数据 data_full <- read_lines('mytxtfile.txt') data_questions <- fromJSON(data_full[1], flatten = TRUE) # 提取目标列,同时过滤掉无响应的行(第一行是启动任务,不需要) data_filtered <- data_questions %>% select(test_part, responses) %>% filter(!is.na(responses)) # 逐个解析JSON字符串,转成数据框并与test_part关联 data_final <- data_filtered %>% # 把每个responses字符串解析成数据框格式 mutate(responses_parsed = map(responses, ~fromJSON(.x) %>% as.data.frame())) %>% # 展开嵌套的数据框,自动补全缺失的问题为NA unnest(responses_parsed) # 查看最终结果 print(data_final)
代码细节解释
- 过滤无效行:第一行的
responses是NA,对应启动任务的步骤,我们用filter(!is.na(responses))排除它,只保留实际的问卷响应行。 - 解析JSON字符串:用
purrr::map遍历每一行的responses字符串,通过fromJSON把它解析成结构化的列表,再转成小数据框。 - 展开嵌套数据:
unnest会把每个解析后的小数据框展开,和原有的test_part列一一对应。对于不同行中缺失的问题(比如第二行没有Q9、Q10等),会自动填充NA,完美适配不同长度的问卷响应。
最终效果
你会得到一个宽格式的数据框:每一行对应一个test_part,列包含test_part字段以及所有Q0、Q1、Q2...的响应值,缺失的问题会显示NA,完全实现了问题响应与对应test_part的关联需求。
内容的提问来源于stack exchange,提问作者strgrl
相关产品推荐
相关产品推荐

