Как извлечь конкретное значение из этого вывода JSON - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь декодировать опубликованный вывод 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"
            }
        ],

Мне удалось извлечь другие детали, такие как заголовок, имя автора и т. Д. Но этот кажется немного сложным.

Извините, если это глупый вопрос.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

В вашем примере на значение "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 позволяет вам получить доступ к ключам в [скобках], но вы также можете использовать '.' свойство accessor, когда у вас есть строка в качестве ключа объекта. Дано:

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

AK можно обозначить как

me["name"]

или

me.name

0 голосов
/ 16 мая 2018

Попробуйте это:

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"}
0 голосов
/ 16 мая 2018

Итак, давайте предположим, что это вся ваша строка 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"
...