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

使用purrr::map()向含id的JSON文件列表追加新列

使用purrr::map()给JSON文件列表追加新列的实现方案

当然可以轻松实现这个需求!我会结合具体代码示例,一步步带你完成整个流程——从读取JSON文件,到追加新列,再到(可选)写回更新后的文件。

第一步:准备工作与读取JSON文件列表

首先,你需要先获取目标JSON文件的路径列表,然后用jsonlite把它们读取成数据框的列表。这里假设你的JSON文件都存在同一个目录下,且每个文件里的表格都包含id这个标识符列:

# 加载需要的包
library(purrr)
library(jsonlite)
library(dplyr) # 用于数据框操作,比如mutate/left_join

# 获取所有JSON文件的完整路径
json_file_paths <- list.files(
  path = "你的JSON文件目录路径",
  pattern = "\\.json$", # 只匹配JSON文件
  full.names = TRUE
)

# 读取所有JSON文件为数据框列表
df_list <- map(json_file_paths, ~ read_json(.x, simplifyVector = TRUE))

第二步:追加新列的两种常见场景

接下来分两种最常见的情况来实现追加新列的操作:

场景1:新列数据与每个数据框的id关联

如果你有一份和id对应的新列数据(比如一个包含id和新列值的表格),可以用left_join结合map来匹配追加:

# 示例:假设这是你的新列数据,id要和JSON里的id完全匹配
new_column_data <- tibble(
  id = c(101, 102, 103), # 对应JSON表格里的id值
  new_feature = c("类型A", "类型B", "类型C") # 要追加的新列内容
)

# 遍历每个数据框,根据id合并新列
updated_df_list <- map(df_list, ~ left_join(.x, new_column_data, by = "id"))

这样处理后,每个数据框都会保留原有所有列,同时追加匹配到的new_feature列;如果某个id在新数据里没有对应值,新列会显示NA,你可以根据需求用replace_na调整。

场景2:新列数据来自文件属性(比如文件名)

如果新列的值是基于文件本身的属性(比如文件名、创建时间),可以用map2同时遍历数据框和文件路径,生成新列:

# 给每个数据框追加"source_file"列,值为对应的文件名
updated_df_list <- map2(df_list, json_file_paths, ~ mutate(.x, source_file = basename(.y)))

第三步:(可选)将更新后的数据写回JSON文件

如果需要把修改后的表格保存回JSON文件,可以用walk2(因为我们只需要执行写操作,不需要返回结果):

# 写回原文件(如果不想覆盖,可以修改第二个参数为新的文件路径)
walk2(updated_df_list, json_file_paths, ~ write_json(.x, .y, auto_unbox = TRUE))

auto_unbox = TRUE参数可以避免把单个值转成JSON数组,让输出的JSON格式更符合常规表格结构。

小提示

  • 读取JSON时,simplifyVector = TRUE是关键,它能把JSON里的数组结构转换成R的数据框,不然会得到嵌套列表。
  • 如果你的JSON结构比较复杂,可以先用str(df_list[[1]])查看第一个数据框的结构,确保id列存在且格式正确。

内容的提问来源于stack exchange,提问作者Monduiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:35:00