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

R调用Ensembl比对API时toJSON无法转换R类型22错误如何解决

错误原因

这个报错不属于jsonlite本身的缺陷,是调用逻辑存在冗余步骤导致的:

  • 报错里提到的R type 22是R语言的外部指针类型,jsonlite本身不支持将这类特殊对象序列化为JSON
  • 调用content(r)时,httr会默认将JSON响应自动解析为R列表对象,部分特殊场景下解析后的对象内部可能残留未公开的外部指针属性,后续传入toJSON时就会触发转换失败
  • 原代码里的fromJSON(toJSON(content(r)))本身是完全冗余的操作,相当于把已经解析好的R对象又转回JSON再重新解析,既浪费性能也引入了不必要的报错风险

解决方案

直接删除冗余的序列化反序列化步骤,两种可选写法都可以规避该问题:

写法1:直接使用httr自动解析的结果

library(httr)
library(jsonlite)

tmp_chr = "16"
tmp_seq_str = "87187517"
tmp_seq_end = "87187717"

server = "http://rest.ensembl.org"
ext = paste0("/alignment/region/homo_sapiens/", tmp_chr, ":", tmp_seq_str, "-", 
              tmp_seq_end, "?species_set_group=primates")

r = GET(paste(server, ext, sep = ""), content_type("application/json"))
# 先校验请求状态,避免解析错误的响应内容
stop_for_status(r)
json_object = content(r)[[1]]

写法2:直接解析响应原始文本(兼容性更好)

如果担心httr自动解析引入异常,可以手动读取响应文本再用jsonlite解析:

r = GET(paste(server, ext, sep = ""), content_type("application/json"))
stop_for_status(r)
resp_text = content(r, as = "text")
json_object = fromJSON(resp_text)[[1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:09:00