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

R使用jsonlite等库解析JSON字符串报lexical error错误求助

问题根因

报错的核心原因是R字符串字面量的转义规则和JSON的转义规则叠加,导致引号未正确转义。
你在R中定义ex时写的\"会先被R的语法解析器转义为普通双引号,最终传入JSON解析器的实际内容为:

{"promptImageScale":"","standardSetLvl":"unknown","prompt":"A) Thank you" Sam. [prgrph] B) Thank you> Sam. [prgrph] C)    Thank you, Sam."}

可以看到prompt字段的值在Thank you后就被提前闭合,后续的 Sam.属于非法JSON语法,因此所有JSON解析库都会报错。你之前验证JSON合法,应该是验证的原始JSON内容,而非R转义处理后的实际解析内容。

你补充的测试场景可以正常运行,是因为你直接给R对象的prompt字段赋值时,单引号包裹的字符串中的双引号不需要额外转义,toJSON序列化时会自动给内容里的双引号加上转义符,生成的JSON本身是合法的,因此可以正常解析。

批量解决方案

  • 如果是从文件、接口读取原始JSON,直接用readLines、httr::content等函数读取原始内容即可,R不会额外处理转义,可直接正常解析。
  • 如果确实需要处理已经生成的、存在转义缺失的R字符串,可以用正则替换补全转义,示例代码如下:
library(stringr)
fix_invalid_json <- function(json_str) {
  # 匹配值内部未转义的双引号:排除已转义的引号、排除JSON语法边界的引号
  str_replace_all(json_str, '(?<!\\\\)"(?![,:}])', '\\\\\\"')
}

# 测试修复你的示例
ex <- "{\"promptImageScale\":\"\",\"standardSetLvl\":\"unknown\",\"prompt\":\"A) Thank you\" Sam. [prgrph] B) Thank you> Sam. [prgrph] C)    Thank you, Sam.\"}"
fixed_ex <- fix_invalid_json(ex)
jsonlite::fromJSON(fixed_ex)
#> $promptImageScale
#> [1] ""
#> 
#> $standardSetLvl
#> [1] "unknown"
#> 
#> $prompt
#> [1] "A) Thank you\" Sam. [prgrph] B) Thank you> Sam. [prgrph] C)    Thank you, Sam."

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:27:01