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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:54:24