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

如何在R语言的DataFrame列中解析JSON数据并拆分对应字段

嘿,这个需求我太熟了!在R里把DataFrame某列的JSON数据展开成单独列,用几个常用的包就能轻松搞定,我给你两种实用方法,你按需选:

方法一:用tidyverse + jsonlite(推荐,更灵活)

这种方法用dplyr做数据处理,tidyr的unnest_wider来展开JSON,jsonlite解析JSON,整个流程很顺畅,还能处理各种特殊情况(比如部分行缺失JSON键)。

步骤&代码示例:

# 先加载需要的包
library(jsonlite)
library(dplyr)
library(tidyr)

# 模拟你的DataFrame(替换成你自己的数据)
df <- tibble(
  id = 1:3,
  json_column = c(
    '{"name": "Alice", "age": 25, "city": "New York"}',
    '{"name": "Bob", "age": 30, "city": "London"}',
    '{"name": "Charlie", "age": 35}'  # 故意少一个city键,测试自动补NA
  )
)

# 核心操作:解析JSON并展开成列
df_expanded <- df %>%
  # 把每个JSON字符串解析成R列表
  mutate(parsed_json = map(json_column, fromJSON)) %>%
  # 将列表列展开为单独的列,缺失的键自动补NA
  unnest_wider(parsed_json)

# 查看最终结果
print(df_expanded)

运行后你会看到原来的json_column被拆成了name、age、city三个独立列,缺值的地方自动填了NA,非常省心。

方法二:用base R + jsonlite(适合习惯基础语法的同学)

如果你不太习惯tidyverse的管道语法,用基础R的lapply和cbind也能实现:

步骤&代码示例:

library(jsonlite)

# 同样用上面的模拟数据
df <- data.frame(
  id = 1:3,
  json_column = c(
    '{"name": "Alice", "age": 25, "city": "New York"}',
    '{"name": "Bob", "age": 30, "city": "London"}',
    '{"name": "Charlie", "age": 35}'
  ),
  stringsAsFactors = FALSE
)

# 解析JSON列成数据框
json_parsed <- do.call(rbind, lapply(df$json_column, fromJSON))

# 合并原数据和解析后的JSON数据
df_expanded <- cbind(df, json_parsed)

# 可以删掉原来的JSON列(可选)
df_expanded$json_column <- NULL

# 查看结果
print(df_expanded)

一些注意事项:

  • 确保你的JSON列是字符串格式,如果已经是列表类型(比如之前解析过),直接跳过fromJSON的步骤
  • 如果JSON里有嵌套的对象(比如{"user": {"name": "Alice", "info": {"age":25}}}),可以多次用unnest_wider逐层展开
  • 如果JSON是数组类型(比如["apple", "banana"]),需要用unnest_longer来展开成多行,而不是多列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:39:14