You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:46:26