如何从此 json 输出中提取特定值

How to extract a particular value from this json output

我正在尝试解码 pubmed json 输出如下。

  1. https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=29753496&retmode=json

  2. https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=15674886&retmode=json

如何从此输出中提取 doi?

        "articleids": [
            {
                "idtype": "pubmed",
                "idtypen": 1,
                "value": "15674886"
            },
            {
                "idtype": "doi",
                "idtypen": 3,
                "value": "10.1002/14651858.CD001801.pub2"
            },
            {
                "idtype": "rid",
                "idtypen": 8,
                "value": "15674886"
            },
            {
                "idtype": "eid",
                "idtypen": 8,
                "value": "15674886"
            }
        ],

我能够提取其他详细信息,如标题、作者姓名等。但这一个似乎有点棘手。

对不起,如果这是一个愚蠢的问题。

所以,假设这是您的整个 JSON 字符串。

var json = '{"articleids": [
    { "idtype": "pubmed", "idtypen": 1, "value": "15674886" },
    { "idtype": "doi", "idtypen": 3, "value": "10.1002/14651858.CD001801.pub2" },
    { "idtype": "rid", "idtypen": 8, "value": "15674886" },
    { "idtype": "eid", "idtypen": 8, "value": "15674886" }
]}';

现在我们要解析它并将其放入一个对象中。

var arr = JSON.parse(json);

要根据项目的值获取特定对象,我们将要使用 .filter()。我们将使用 .pop() 到 return returned 数组的第一个元素,在本例中它应该是唯一的对象 returned.

var doi = arr.articleids.filter(function(v)
{
    return v.idtype == "doi";
}).pop();

变量 doi 现在将保存过滤后的对象。

idtype: "doi"
idtypen: 3
value: "10.1002/14651858.CD001801.pub2"

在您的示例中,值 "doi" 可以引用为:

articleids[1].idtype

这是您可以自己使用的示例。

注意:我将您的数据结构包装在一个名为 obj

的对象中
var obj = {
    "articleids": [{
        "idtype": "pubmed",
        "idtypen": 1,
        "value": "15674886"
    }, {
        "idtype": "doi",
        "idtypen": 3,
        "value": "10.1002/14651858.CD001801.pub2"
    }, {
        "idtype": "rid",
        "idtypen": 8,
        "value": "15674886"
    }, {
        "idtype": "eid",
        "idtypen": 8,
        "value": "15674886"
    }]
}

//access doi
obj.articleids[1].idtype // -> 'doi'

//loop throigh idTypes and log them to the console
obj.articleids.forEach(function(article) {
    console.log(article.idtype)
}) 

JSON 允许您访问 [括号] 中的键,但您也可以使用 '.' 属性 访问器,当你有一个字符串作为对象键时。给定:

var me = {"name":"AK"}

AK可以引用为

me["name"]

me.name

试试这个:

var jsonObj = {
 "articleids": [{
   "idtype": "pubmed",
   "idtypen": 1,
   "value": "15674886"
  },
  {
   "idtype": "doi",
   "idtypen": 3,
   "value": "10.1002/14651858.CD001801.pub2"
  },
  {
   "idtype": "rid",
   "idtypen": 8,
   "value": "15674886"
  },
  {
   "idtype": "eid",
   "idtypen": 8,
   "value": "15674886"
  }
 ]
};

var res = jsonObj.articleids.filter(obj => obj.idtype == 'doi');

console.log(res[0]); // {idtype: "doi", idtypen: 3, value: "10.1002/14651858.CD001801.pub2"}