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

如何用PHP从PubMed生成的JSON文件中提取指定字段?

解决PubMed ESummary API JSON提取字段无输出问题

你的代码没输出主要是几个细节问题导致的,我帮你逐一排查并修正:

核心问题分析

  1. 数组/对象访问方式不匹配:你用json_decode($json, TRUE)把JSON转成了关联数组,但后续却用对象的->运算符去访问属性,这在PHP里是不兼容的,若报错级别未开启就会直接无输出。
  2. URL格式错误:拼接的API URL里用了&(HTML实体转义的&),这会导致请求的URL无效,NCBI服务器可能返回错误JSON或空数据。
  3. 缺少错误处理:没有判断请求是否成功、JSON解析是否正常、目标PMID是否存在于返回结果中,一旦中间环节出问题就直接无输出。

修正后的完整代码

<?php
$new_pmid = $_POST['new_pmid'];
// 修正URL:把&amp;换成普通的&,HTML实体在PHP URL拼接里不需要
$api_json_url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=" . $new_pmid . "&retmode=json";

// 加上请求失败的判断
$json = file_get_contents($api_json_url);
if (!$json) {
    echo "请求PubMed API失败,请检查网络或PMID是否有效";
    exit;
}

// 解析JSON,同时检查解析是否成功
$data = json_decode($json, TRUE);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON解析失败:" . json_last_error_msg();
    exit;
}

// 检查目标PMID是否存在于返回结果中
if (!isset($data['result'][$new_pmid])) {
    echo "未找到该PMID对应的文献数据,请确认PMID是否正确";
    exit;
}

// 用数组索引方式访问字段
$title = $data['result'][$new_pmid]['title'];
$source = $data['result'][$new_pmid]['source'];
$issn = $data['result'][$new_pmid]['issn'];
$authors = $data['result'][$new_pmid]['authors']; // 这是一个作者数组,可以循环遍历

// 输出测试
echo "标题:" . $title . "<br>";
echo "期刊来源:" . $source . "<br>";
echo "ISSN:" . $issn . "<br>";
echo "作者列表:<br>";
foreach ($authors as $author) {
    echo "- " . $author['name'] . "<br>";
}
?>

关键细节说明

  • 访问字段时用$data['result'][$new_pmid]['字段名']的数组方式,完全匹配PubMed ESummary返回的JSON结构。
  • 增加了多层错误判断,能帮你快速定位问题(比如网络问题、PMID无效、JSON解析失败)。
  • 如果需要提取其他字段,可以参考PubMed ESummary的JSON结构,直接用对应的数组键名即可。

内容的提问来源于stack exchange,提问作者Nguyen Hoang Bach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:30:50