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

在R中将含嵌套列表的大型JSON数据集转换为DataFrame

处理嵌套JSON转R DataFrame并合并列表字段

核心思路

用jsonlite::fromJSON读取嵌套JSON时,数组类型的字段会被转为R中的列表列。要将这类列表列合并为单个单元格的字符串,只需遍历列表列,把每个子列表的元素拼接成字符串即可。

示例操作

假设你的JSON数据结构如下(模拟嵌套场景):

[
  {"id": 1, "name": "Alice", "new": ["math", "english"]},
  {"id": 2, "name": "Bob", "new": ["physics"]},
  {"id": 3, "name": "Charlie", "new": []}
]

步骤1:读取JSON数据

先加载必要的包并读取数据:

library(jsonlite)
library(dplyr)
library(purrr)

# 读取本地JSON文件,若为JSON字符串直接传入即可
json_data <- fromJSON("your_data.json")

查看数据结构会发现new列是列表类型,每个元素对应一个子列表。

步骤2:合并列表字段为字符串

用map_chr遍历new列,将每个子列表的元素用逗号(或自定义分隔符)拼接,同时处理空列表的情况:

final_df <- json_data %>%
  mutate(
    new = map_chr(
      new, 
      ~ifelse(length(.x) == 0, "", paste(.x, collapse = ", "))
    )
  )

如果不想用dplyr和purrr,用基础R也能实现:

json_data$new <- sapply(
  json_data$new, 
  function(x) ifelse(length(x) == 0, "", paste(x, collapse = ", "))
)
final_df <- as.data.frame(json_data)

处理深层嵌套的情况

如果new字段在更深的层级(比如嵌套在info对象里),可以先扁平化数据再处理:

[
  {"id": 1, "info": {"name": "Alice", "new": ["math", "english"]}}
]

操作代码:

# 扁平化嵌套结构
flat_data <- flatten(json_data)

# 处理深层的list列
final_df <- flat_data %>%
  mutate(
    `info.new` = map_chr(`info.new`, ~paste(.x, collapse = ", "))
  )

或者直接提取深层字段并处理:

final_df <- json_data %>%
  mutate(
    name = map_chr(info, "name"),
    new = map_chr(info, ~paste(.x$new, collapse = ", "))
  ) %>%
  select(id, name, new)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:50:38