在R语言中从多JSON文件提取指定字段并转换为CSV的问题
解决方法
1. 写个函数处理单个JSON文件
先搞个专门处理单文件的函数,核心就是揪出translation_map里的目标字段,同时搞定空结构的问题:
library(jsonlite) library(tidyverse) process_json <- function(file_path) { # 读入JSON json_data <- fromJSON(file_path) # 提取translation_map并转成规整的数据框 translation_df <- json_data$translation_map %>% # 把每个动态键(比如str_empty)转成单独列 enframe(name = "key", value = "translations") %>% # 展开nl和en的嵌套内容 unnest_wider(translations) %>% # 提取nl的value、audio和en的value,空结构直接转成NA mutate( nl_value = map_chr(nl, ~.x$value %||% NA_character_), nl_audio = map_chr(nl, ~.x$audio %||% NA_character_), en_value = map_chr(en, ~.x$value %||% NA_character_) ) %>% # 删掉没用的原始nl、en列 select(-nl, -en) return(translation_df) }
2. 批量处理所有文件并导出CSV
用map_dfr一次性处理所有JSON,自动合并成大表格:
# 获取所有JSON的完整路径(建议开full.names=TRUE,避免路径坑) files <- list.files(path = ".", pattern = "\\.json$", all.files = FALSE, full.names = TRUE) # 批量处理+合并 all_data <- map_dfr(files, process_json, .id = "source_file") # 导出成CSV write_csv(all_data, "translations_output.csv")
关键细节说清楚
flatten=TRUE为啥没用?因为translation_map是动态键值对结构,不是层级固定的嵌套列表,flatten搞不定这种动态键,得用enframe先转成键-值格式再处理。- 空结构怎么处理?靠
map_chr加%||%,碰到{}这种空结构直接转成NA,保证数据框不会崩。 - 加
source_file列是为了知道每条数据来自哪个原文件,方便后续查问题。
内容的提问来源于stack exchange,提问作者sourlemonaid
相关产品推荐
相关产品推荐

