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

如何在R中提取含NULL且变量不统一的JSON列并拆分字段

解决R中解析JSON列并拆分到单独列的问题

问题根源

你遇到的报错是因为submitted_data列里的JSON格式不标准:

  • 日期(如2002-03-04)、字符串值(如retail)没有加双引号,JSON要求字符串必须用双引号包裹
  • R的NULL不是JSON规范里的null,无法被jsonlite识别

解决步骤

1. 构造原始数据集

先还原你的初始数据:

library(tibble)
df <- tibble(
  Name = c("Bob", "Fadela", "Andy"),
  Company = c("Bob Inc.", "Fadela Co.", "Andrew Inc."),
  submitted_data = c('{"dob":2002-03-04, "tel": 1234}', "NULL", '{"dob": 1999-10-10, "industry": retail}')
)

2. 修正JSON格式

用正则表达式把不标准的JSON转为规范格式:

# 将R的NULL替换为JSON的"null"
df$submitted_data <- gsub("NULL", '"null"', df$submitted_data)
# 给日期格式的内容添加双引号
df$submitted_data <- gsub("([0-9]{4}-[0-9]{2}-[0-9]{2})", '"\\1"', df$submitted_data)
# 给未加引号的字符串值添加双引号
df$submitted_data <- gsub("(:\\s*)([a-zA-Z]+)([,}])", "\\1\"\\2\"\\3", df$submitted_data)

3. 解析JSON并合并数据

用jsonlite解析修正后的JSON列,再和原数据合并:

library(jsonlite)
library(dplyr)

# 逐个解析JSON字符串,转为数据框行
json_rows <- lapply(df$submitted_data, function(x) {
  if (x == '"null"') {
    # 处理空值情况,生成全NA的行
    tibble(dob = NA, tel = NA, industry = NA)
  } else {
    fromJSON(x) %>% as_tibble()
  }
}) %>% bind_rows()

# 合并原数据的Name、Company列和解析后的JSON列
result_df <- cbind(df[, c("Name", "Company")], json_rows)

# 可选:将NA替换为显示用的"NULL"(匹配示例输出格式)
result_df <- result_df %>% mutate(across(everything(), ~ifelse(is.na(.), "NULL", .)))

最终结果

运行后得到的result_df格式如下:

NameCompanydobtelindustry
BobBob Inc.2002-03-041234NULL
FadelaFadela Co.NULLNULLNULL
AndyAndrew Inc.1999-10-10NULLretail

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:07:04