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

R语言从数据框列中提取非对称JSON数据的实现方案咨询

解决方案

你已经完成了JSON列的解析得到frame列表,后续可以直接基于该列表结合tidyverse工具链完成展开,操作代码如下:

  1. 加载依赖包
library(tidyverse)
  1. 合并解析结果与原表基础列
# 保留原表的id、name列,绑定解析后的JSON数据
base_df <- dataframe_example %>% 
  select(id, name) %>% 
  mutate(json_parsed = frame)
  1. 展开_inv数组为多列
# 先全局计算_inv的最大长度,适配非固定长度场景
max_inv_length <- max(map_int(frame, ~ length(.x[["_inv"]])), na.rm = TRUE)

# 处理_inv字段,不足最大长度的补NA
inv_processed <- base_df %>% 
  mutate(
    inv_list = map(json_parsed, ~ {
      inv_vec <- .x[["_inv"]]
      # 空数组/长度不足的统一补NA到最大长度
      c(inv_vec, rep(NA_real_, max_inv_length - length(inv_vec)))
    })
  ) %>% 
  # 把数组展开为独立列
  unnest_wider(inv_list, names_sep = "_") %>% 
  # 重命名为要求的列名格式
  rename_with(~ str_replace(.x, "inv_list_", "_inv_"), starts_with("inv_list_"))
  1. 提取_person嵌套字段
# 提取_person下的_personid值,缺失值自动填NA
final_result <- inv_processed %>% 
  mutate(
    _person_id = map_chr(json_parsed, ~ .x[["_person"]][["_personid"]] %||% NA_character_)
  ) %>% 
  # 移除中间过程列
  select(-json_parsed)

运行后得到的final_result就是你需要的目标格式数据。如果需要处理其他类似的嵌套字段,只需要参考_person的提取逻辑,对应修改字段名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:15:03