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

时间:2018-05-15 21:48:43

标签: javascript json pubmed

我正在尝试解码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

  3. 如何从此输出中提取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"
                }
            ],
    

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

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

3 个答案:

答案 0 :(得分:1)

因此,我们假设这是您的整个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()返回返回数组的第一个元素,在这种情况下应该是返回的唯一对象。

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

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

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

答案 1 :(得分:0)

试试这个:

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"}

答案 2 :(得分:-1)

在您的示例中,值“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