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

R语言fromJSON读取美人口普查局贸易API数据解析报错求解

R读取人口普查局贸易API报JSON解析错误的排查解决思路

报错根因

这个错误不是接口未返回JSON格式内容,本质是接口返回的JSON数据中,商品描述字段存在未做转义处理的非法控制字符/孤立引号。
一年前代码可正常运行,是因为当时2021年的贸易数据集尚未录入带这类特殊字符的商品描述内容;后续普查局更新补录历史数据时,未对写入的文本做JSON标准转义,导致jsonlite默认严格解析模式下直接抛出词法错误。
另外你当前代码只定义了API key变量但没有拼接到请求URL中,无key请求容易被接口截断返回内容,也可能加剧JSON格式异常问题。

排查步骤

  • 不要直接把URL传入fromJSON(),先用httr显式拉取原始响应内容,先确认请求状态正常,再定位异常字符位置,参考代码:
library(httr)
library(jsonlite)
library(tidyverse)
library(janitor)

year <- 2021
# 把自己申请的API key拼到URL末尾
req_url <- paste0("https://api.census.gov/data/timeseries/intltrade/exports/hs?get=ALL_VAL_YR,ALL_VAL_MO,E_COMMODITY,E_COMMODITY_SDESC,E_COMMODITY_LDESC,MONTH,QTY_1_YR,UNIT_QY1&YEAR=",year,"&key=你的实际APIkey")

# 发送GET请求
resp <- GET(req_url)
# 检查请求状态,返回状态码200才是正常响应
http_status(resp)
# 提取原始返回的文本内容
raw_content <- content(resp, as = "text", encoding = "UTF-8")
  • 拿到原始文本后,直接搜索报错提示里的文本片段ANY OTHER SINGLE FRUIT, NUT OR VEG, UNFERMENTED AND NOT C,就能看到该位置附近存在未转义的换行、回车或者孤立双引号,这类字符不符合JSON语法规范,是触发报错的直接原因。

修复方案

优先使用文本预清洗的方案,稳定性最高:

  • 在解析前先对原始返回文本做清洗,替换掉所有未转义的非法控制字符、孤立引号,再传入解析函数,参考代码:
# 清洗JSON文本中的非法字符
cleaned_json <- raw_content %>%
  # 替换所有未被反斜杠转义的换行、回车符为空格
  str_replace_all("(?<!\\\\)\\r|(?<!\\\\)\\n", " ") %>%
  # 转义所有字符串值内部未转义的孤立双引号
  str_replace_all('(?<!\\\\)"(?=[^,\\[\\]]*?[,"\\]])', '\\\\"')

# 解析清洗后的内容
export_raw <- fromJSON(cleaned_json)
# 转换为数据框,第一行是字段名,提取后重置列名再删除首行
export_API <- as.data.frame(export_raw)
names(export_API) <- export_API[1,]
export_API <- export_API[-1,] %>% 
  clean_names()

如果是临时取数需要快速跑通,也可以尝试降低解析校验等级,不过该方案容错边界不可控,不建议用于定期跑批的脚本:

export_API <- as.data.frame(fromJSON(raw_content, validate = FALSE))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:15:43