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

R使用GET、fromJSON读取网络JSON文件解析报错的解决方法

报错根因

你遇到的两个解析报错和JSON结构、字段符号无关,核心原因是目标接口返回的JSON文件带有UTF-8 BOM(字节顺序标记):文件开头存在3个不可见的标识字节(0xEF、0xBB、0xBF),你看到的<ef>就是第一个字节的解析结果。手动调用rawToChar()转码、直接给fromJSON()传本地文件路径时,这三个字节会被识别为普通文本字符,从开头打乱JSON结构识别逻辑,才会后续抛出字段解析异常,你贴出的JSON本身是完全标准合法的结构,不需要手动裁剪字符串清洗。

正确解析方案

不需要做手动字符串处理,只要在读取环节正确处理BOM头即可:

方案1:接口直连读取(推荐)

不要手动调用rawToChar()转换请求返回的原始二进制内容,用httr内置的content()函数自动处理编码、剥离BOM头:

library(httr)
library(jsonlite)

url <- "https://comtrade.un.org/Data/cache/reporterAreas.json"
resp <- GET(url)
# 指定返回文本类型、明确UTF-8编码,自动处理BOM
json_content <- content(resp, as = "text", encoding = "UTF-8")
# 正常解析JSON
parsed_data <- fromJSON(json_content)
# 提取目标结果表直接取字段即可
reporter_tbl <- parsed_data$results

方案2:本地下载文件读取

如果已经把文件下载到本地,不要直接把文件路径传入fromJSON(),先按带BOM的UTF-8编码读取文本内容再解析:

library(jsonlite)

# 替换为你的本地文件路径
local_file <- "reporterAreas.json"
# 指定UTF-8-BOM编码读取,自动跳过开头BOM标记
json_text <- paste(readLines(local_file, fileEncoding = "UTF-8-BOM"), collapse = "")
parsed_data <- fromJSON(json_text)
reporter_tbl <- parsed_data$results
问题标题参考
  • R解析接口返回JSON报错unexpected character '<ef>'的BOM编码问题
  • 解决httr获取JSON后jsonlite解析失败的UTF-8 BOM适配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:18:21