【问题标题】:JSON from API request in R giving "invalid character" but only part of the time来自 R 中 API 请求的 JSON 给出“无效字符”,但只是部分时间
【发布时间】:2021-07-26 02:29:41
【问题描述】:

我在 Stack Overflow 上遇到过类似的问题,但没有什么对我有用。最接近的例子可能是this one

我一直在做的是向 NASA POWER API 发送 API 请求。我的请求如下所示:

"https://power.larc.nasa.gov/beta/api/temporal/hourly/point?start=20080101&end=20180101&latitude=-34.96260135&longitude=-54.9401847474085&community=re&parameters=ALLSKY_SFC_SW_DWN,T2M,WS2M&format=json&user= dataqueryabed&header=false&time-standard=lst"

我使用 GET 来下载信息。我得到 200 代码,返回的响应对象在我看来似乎很好。现在,当我下载数据时,我给它一个经度和纬度对。我通常能够完成这项工作,但有时却不行。

我尝试将 JSON 对象转换为数据框,如下所示:

#Step 1:   
content(some_request, as = "text")
#Step 2: 
some_response_unframed = fromJSON(rawToChar(response_given$content))
#Step 3: 
response_framed = enframe(unlist(some_response_unframed))

#What we want is "response framed"

上述方法有时似乎有效,但有时无效,我不知道为什么。例如,坐标纬度-34.9626,经度=-54.9402,这很好用。但是,如果我尝试使用坐标经度 39.288 和纬度 -6.280 的请求,我可以正确下载所有内容,并且它可以一直运行到“fromJSON”步骤:

tanzania_offshore_try_now = fromJSON(rawToChar(tanzania_offshore_data$content))
Error: lexical error: invalid char in json text.
                                       <!DOCTYPE HTML PUBLIC "-//IETF/
                     (right here) ------^

我想不通:

  1. 为什么它适用于某些配对而不适用于其他配对
  2. 我应该如何像之前发布的答案那样编辑 JSON 内容?在这个阶段我没有从文件或任何东西中读取,它是 R 中的“响应”类型对象。

提前致谢!

编辑感谢@MrFlick 指出显而易见的,不知道我是怎么错过的。所以,看来我需要做的就是重新下载数据。我现在一切正常。我很困惑为什么请求似乎在一分钟而不是另一分钟有效,我最好的猜测是他们的服务器不希望您连续下载太多太相似的请求。不确定我现在是否担心我的脚本正在运行。再次感谢@MrFlick。

【问题讨论】:

  • 如果您尝试访问不起作用的 URL,大概是 power.larc.nasa.gov/beta/api/temporal/hourly/…,您会看到没有返回任何数据。只是一条错误消息。该错误消息不是 JSON 格式。您需要联系提供 API 的人员以了解为什么没有返回数据。
  • 您好,谢谢。也许我应该更清楚,但是:不,在某些情况下返回了一些数据,我仍然收到此消息。我将更新问题以说明如何。不过,谢谢。
  • @MrFlick - 当我点击您发布的链接时,它会返回原始 JSON 数据,因此这似乎是服务器端问题,可能 API 间歇性过载。
  • @27ϕ9 哦。有趣的。我收到 502 代理错误(代理服务器从上游服务器收到无效响应。)
  • 我又点击了几次,也看到了 502 代理错误。 OP,您可以在函数中构建一些错误检查,并在失败时重试 - 使用 jsonlite::validate() 检查下载的内容是有效的 JSON。

标签: r json api


【解决方案1】:

在社区支持下回答了这个问题。我应该更好地检查我的响应对象。

【讨论】:

    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多