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
相关产品推荐
相关产品推荐

