如何在R中将指定格式XLS转换为自定义嵌套JSON?
用R实现XLS到指定嵌套JSON的转换
完全可以用R实现这个转换,核心思路是读取Excel数据后按需求整理成嵌套列表,再转为目标JSON格式。以下是具体实现步骤和代码:
1. 安装并加载依赖包
需要用到readxl读取Excel文件,jsonlite处理JSON转换:
install.packages(c("readxl", "jsonlite")) library(readxl) library(jsonlite)
2. 读取并预处理Excel数据
假设你的Excel文件第一列是子元素类型(如Description/Levels/Units),后续列是JSON的顶层主元素。读取后转置数据,方便按主元素维度处理:
# 读取Excel,将第一列设为行名 df <- read_excel("你的Excel文件路径.xlsx", row_names = TRUE) # 转置数据,此时行名对应原Excel的列标题(即JSON主元素) df_t <- t(df) %>% as.data.frame(stringsAsFactors = FALSE)
3. 构建嵌套结构列表
遍历每个主元素,整理非空的子项,其中Levels需进一步嵌套为键值对(值为空字符串):
result_list <- lapply(1:nrow(df_t), function(i) { current_row <- df_t[i, , drop = FALSE] main_key <- rownames(df_t)[i] sub_list <- list() # 处理Description字段 desc <- current_row$Description if (!is.na(desc) && desc != "") { sub_list$Description <- desc } # 处理Units字段 units <- current_row$Units if (!is.na(units) && units != "") { sub_list$Units <- units } # 处理Levels字段:收集非空选项生成嵌套对象 levels_cols <- grep("Level", colnames(current_row), value = TRUE) levels_vals <- current_row[, levels_cols, drop = FALSE] levels_vals <- levels_vals[!is.na(levels_vals) & levels_vals != ""] if (length(levels_vals) > 0) { sub_list$Levels <- setNames(rep("", length(levels_vals)), levels_vals) } list(main_key = sub_list) }) # 合并所有主元素到最终列表 final_list <- do.call(c, lapply(result_list, function(x) x))
4. 转换为格式化JSON
# 生成带缩进的JSON字符串 json_output <- toJSON(final_list, pretty = TRUE, auto_unbox = TRUE) # 保存到本地文件 write(json_output, "output.json")
这段代码会严格匹配你期望的JSON格式:列标题作为顶层键,Description/Units作为直接子键,Level开头的选项嵌套在Levels下且值为空字符串。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

