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

调用API后使用fromJSON转换数据遭遇JSON语法错误求助

问题根源与解决方案

嘿,我一眼就看出问题所在啦!你遇到的错误完全是因为用错了解析工具——你调用API时加了&csv参数,这说明你明确要求返回CSV格式的数据,但你却用解析JSON的fromJSON()函数去处理它,自然会触发语法错误。

具体原因拆解

  • 你的API请求URL末尾带了&csv,服务端会直接返回CSV文本(你可以打印rawToChar(test_county$content)的前几行,就能看到开头是date,nass_week,nass_week_year,...,这是标准的CSV结构)。
  • jsonlite::fromJSON()只能解析JSON格式的文本,面对CSV的逗号分隔结构,它会识别为无效的JSON字符,所以抛出"invalid char in json text"错误。

修正后的解决代码

既然返回的是CSV,直接用CSV解析工具处理就好,这里提供两种简单的实现方式:

方法1:用httr自带的content()函数自动解析(推荐)

httr::content()会根据响应的Content-Type自动选择合适的解析方式,非常省心:

library(httr)
library(readr) # 依赖readr来解析CSV,也可以用base的read.csv

# 发起API请求
test_county <- GET("https://nass.agroclimate.org/ws/data/daily.php?county=USAL01001&sdate=20220101&edate=20220108&csv")

# 自动解析为dataframe
df <- content(test_county, type = "text/csv", show_col_types = FALSE)

方法2:手动转换为字符后读取CSV

如果你想手动控制解析过程,可以先把响应内容转成字符,再用CSV读取函数处理:

library(httr)
library(readr)

test_county <- GET("https://nass.agroclimate.org/ws/data/daily.php?county=USAL01001&sdate=20220101&edate=20220108&csv")

# 转换为字符后读取为dataframe
csv_text <- rawToChar(test_county$content)
df <- read_csv(csv_text, show_col_types = FALSE)

额外验证小技巧

以后遇到类似的响应格式疑惑,可以用以下代码快速确认返回内容的类型:

# 查看响应的Content-Type
cat(content_type(test_county))
# 打印响应内容的前100个字符,快速判断格式
cat(substr(rawToChar(test_county$content), 1, 100))

内容的提问来源于stack exchange,提问作者Alex T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:25:13