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

如何在R中简化GraphQL返回的JSON输出以适配批量rsID处理?

优化R脚本:批量查询rsID并生成简洁JSON结果

以下是针对Open Targets Genetics Portal GraphQL接口的优化脚本,解决嵌套JSON难读、关键字段提取不便的问题,同时适配数千个rsID的批量处理需求:

完整优化脚本

# 安装依赖包(首次运行执行)
install.packages(c("httr", "jsonlite", "dplyr"))

# 加载核心包
library(httr)
library(jsonlite)
library(dplyr)

# 批量rsID列表(替换为你的目标rsID集合)
rs_ids <- c("rs12345", "rs67890", "rs11223", "rs44556")

# 构建精简的GraphQL查询模板
graphql_query <- '
query getVariantInfo($rsIds: [String!]!) {
  variantsByRsIds(rsIds: $rsIds) {
    rsId
    id
    nearestGene {
      id
      symbol
    }
    chromosome
    position
    refAllele
    altAllele
  }
}
'

# 发送批量查询请求
response <- POST(
  url = "https://api.genetics.opentargets.org/graphql",
  body = list(query = graphql_query, variables = list(rsIds = rs_ids)),
  encode = "json"
)

# 解析原始响应并扁平化处理
raw_data <- fromJSON(content(response, "text"), flatten = TRUE)
cleaned_data <- raw_data$data$variantsByRsIds %>%
  mutate(
    # 处理nearestGene数组,提取首个匹配基因的信息
    gene_id = ifelse(lengths(nearestGene) > 0, nearestGene$id[[1]], NA),
    gene_symbol = ifelse(lengths(nearestGene) > 0, nearestGene$symbol[[1]], NA)
  ) %>%
  # 保留关键字段,移除冗余嵌套结构
  select(
    rs_id = rsId,
    variant_id = id,
    gene_id,
    gene_symbol,
    chromosome,
    position,
    ref_allele = refAllele,
    alt_allele = altAllele
  )

# 生成简洁可读的JSON输出
cleaned_json <- toJSON(
  cleaned_data,
  pretty = TRUE,
  na = "null",
  auto_unbox = TRUE,
  digits = 10
)

# 保存到本地文件(适配大规模数据存储)
write(cleaned_json, "cleaned_variant_info.json")

# 控制台预览结果
cat(cleaned_json)

核心优化点

  • 精简查询负载:仅请求业务所需的关键字段,大幅减少返回数据的嵌套层级和体积,提升解析效率。
  • 扁平化数据结构:将嵌套的nearestGene数组展开为独立的gene_id和gene_symbol字段,消除多层嵌套,直接可用作后续分析的结构化数据。
  • 高效批量处理:通过GraphQL变量一次性传入所有rsID,避免循环发起单条请求的低效模式,适配数千个rsID的处理场景。
  • 可读性与复用性:生成的JSON采用格式化输出(pretty=TRUE),去除不必要的数组包裹(auto_unbox=TRUE),统一缺失值为null,既方便浏览器查看,也便于后续用R/Python等工具直接读取分析。
  • 容错处理:对无匹配基因的变异自动标记为null,不会中断批量处理流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:45:24