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

R读取JSON文件报expect ',' or '}'错误的解决方法求助

问题原因

你的报错由两个核心问题共同导致:

  • JSON内容被异常插入空格破坏语法:所有数字、字符串的单个字符之间都被插入了空格,比如合法的数字2200被拆为2 2 0 0,合法的字符串1-2-dry.de被拆为1 - 2 - d r y . d e,JSON解析器无法识别这类不符合规范的值,你收到的报错指向的就是被拆分的数字位置,解析器读取到第一个数字2后,无法识别后续空格加2的内容,因此抛出格式错误。
  • 文件为多JSON对象格式:文件内包含两个独立的JSON对象,既没有用逗号分隔,也没有包裹在数组中,普通单JSON解析逻辑无法直接处理。
解决步骤

你可以先读取原始文本做格式清理,再逐行解析JSON,最终合并为data.table,完整可运行代码如下:

# 加载依赖包,未安装可先执行 install.packages(c("jsonlite", "data.table"))
library(jsonlite)
library(data.table)

# 1. 读取原始文件全部内容
raw_text <- readLines("/替换为你的文件实际路径/filename.json", warn = FALSE)
raw_text <- paste(raw_text, collapse = "")

# 2. 清理异常插入的空格
## 清理数字之间的空格,把2 2 0 0还原为2200
clean_text <- gsub("(?<=\\d) (?=\\d)", "", raw_text, perl = TRUE)
## 清理字母/连接符之间的单个空格,保留连续空格(原文本中单词之间的连续空格为正常分隔)
clean_text <- gsub("(?<=[a-zA-Z.\\-]) (?=[a-zA-Z.\\-])", "", clean_text, perl = TRUE)
## 清理JSON键名两侧的多余空格,把" D "还原为"D"
clean_text <- gsub('"\\s*([^"]+?)\\s*"', '"\\1"', clean_text, perl = TRUE)

# 3. 拆分多个独立JSON对象
json_lines <- strsplit(clean_text, "}\\{")[[1]]
## 补全每个JSON对象的首尾括号
json_lines <- ifelse(!startsWith(json_lines, "{"), paste0("{", json_lines), json_lines)
json_lines <- ifelse(!endsWith(json_lines, "}"), paste0(json_lines, "}"), json_lines)

# 4. 逐行解析JSON,合并为data.table
parse_list <- lapply(json_lines, function(x) {
  parsed <- fromJSON(x)
  # 展开嵌套的T数组,和外层字段合并
  dt <- as.data.table(parsed$T)
  dt[, `:=`(D = parsed$D, SP = parsed$SP, FI = parsed$FI, LI = parsed$LI)]
  return(dt)
})
final_dt <- rbindlist(parse_list, fill = TRUE)

如果运行后仍有格式问题,可以先打印clean_text的前几百个字符,检查清理后的JSON格式是否符合规范,再针对性调整正则规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:02