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

R中fromJSON直读URL的JSON报‘Undefined index: dgLanguage’错,本地解析同内容正常

R 环境下远程JSON读取异常问题

基础测试配置

本次测试使用的目标URL定义如下:

url_bbmp <- "http://accounts.bbmpgov.in/PublicView/vss00CvStatusData.php?pAction=LoadPaymentGridData&pCriteria=&pDateFrom=01-Jan-1900&pDateTo=01-Jan-1900&pDateType=pDF&pOrderBy=-1&pFinancialYearID=-1&pBudgetHeadID=-1&pDDOIDs=&pWardIDs=&pDateFilterYN=false&pWardID=174&filterscount=0&groupscount=0&pagenum=0&pagesize=2&recordstartindex=0&recordendindex=2&_=1614505598778#"

复现现象

  • 浏览器直接粘贴该URL访问时,可正常返回格式合规的大段JSON文本
  • R环境下直接调用jsonlite::fromJSON(url_bbmp)读取URL内容时,会收到服务端返回的PHP类型错误:

$rError
[1] "Undefined index: dgLanguage"

对照验证

将浏览器加载得到的JSON文本单独保存为本地文件raw_publicview.txt后,R环境下执行以下解析代码均可正常运行:

  1. 统计JSON长度:
    jsonlite::read_json("raw_publicview.txt") %>% length()
    
    可正常输出结果189
  2. 转换为数据框统计行数:
    fromJSON(readLines("raw_publicview.txt",warn = F)) %>% as.data.frame %>% nrow()
    
    同样可正常输出结果189
    以上验证可证明JSON内容本身不存在格式问题。

异常原因说明

触发该报错的核心是R直接发起的HTTP请求和浏览器发起的请求,在请求上下文上存在差异:

  • 该接口对应的后端页面使用了dhtmlxGrid类前端表格组件,代码中会直接读取会话Cookie里的dgLanguage字段做语言匹配;因为后端代码没有对该字段做存在性判断,当请求没有携带对应Cookie时,就会抛出PHP层面的“未定义索引”报错。
  • 浏览器直接访问该URL时,会自动携带之前访问站点公共页面时种下的会话Cookie(其中包含dhtmlxGrid组件自动生成的dgLanguage键值),因此服务端能正常识别请求并返回合规JSON。
  • jsonlite::fromJSON直接读取URL时,底层发起的是无会话的裸HTTP请求,不会自动携带站点的会话Cookie,缺少了后端校验必需的dgLanguage字段,因此触发报错。

解决思路

  • 不要直接依赖fromJSON内置的URL读取功能,改用支持自定义请求头、Cookie的HTTP包(如httr)模拟浏览器请求流程:先访问站点首页获取会话Cookie,再携带匹配浏览器的请求头向目标URL发起请求,将拿到的响应文本传入fromJSON做解析。
  • 可通过浏览器开发者工具,复制目标请求的完整请求头、Cookie配置,导入到R的HTTP请求参数中,匹配服务端的校验规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 15:24:04