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

R语言将数据框嵌套JSON列转为同数据框新增列

嘿,完全懂你这种被混乱JSON列折腾的痛苦!手动写临时处理代码确实繁琐又容易出错,针对你这种每个JSON条目都是单个对象包裹在数组里的情况,咱们用R里的dplyr+purrr+jsonlite组合就能一步搞定,代码简洁还通用。

先把你的示例数据补全方便演示:

library(dplyr)
library(jsonlite)
library(tidyr)

sample.df <- data.frame(
  id = c(101, 102, 103, 104),
  json_col = c(
    '[{"foo_a":"bar"}]',
    '[{"foo_a":"bar","foo_b":"bar"}]',
    '[{"foo_a":"bar","foo_c":2}]',
    '[{"foo_a":"bar","foo_b":"bar","foo_c":3}]'
  ),
  stringsAsFactors = FALSE
)

接下来是核心处理代码,两步就能完成转换:

  1. 把JSON列解析成包含数据框的列表列
  2. 将列表列展开成原数据框的新增列
final_df <- sample.df %>%
  # 逐个解析JSON字符串,转成单一行的数据框
  mutate(json_parsed = purrr::map(json_col, ~ jsonlite::fromJSON(.) %>% as.data.frame(stringsAsFactors = FALSE))) %>%
  # 把列表里的每个数据框列展开成原数据框的新列,缺失的键自动填NA
  tidyr::unnest_wider(json_parsed) %>%
  # 可选:删掉原来的JSON列和临时列表列
  select(-json_col, -json_parsed)

运行后你会得到这样的结果:

id foo_a foo_b foo_c
1 101   bar  <NA>    NA
2 102   bar   bar    NA
3 103   bar  <NA>     2
4 104   bar   bar     3

为什么这个方法好用?

  • 自动处理缺失的键:比如id=101没有foo_b、foo_c,会自动填充NA,不用手动判断
  • 通用适配:不管JSON里有多少个键,都会自动转换成对应的列,不用提前写死列名
  • 代码简洁:管道式写法逻辑清晰,比临时写循环或者逐个提取字段高效太多

如果你的实际数据里偶尔会出现空数组或者多元素数组的情况,这个方法也能兼容:空数组会生成全NA的列,多元素数组会把每个元素拆成单独的行(如果不需要拆分,可以加keep_empty = TRUE参数调整)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:17:57