Получить список значений DOI из URL-адреса JSON

#php #json #parsing #doi

#php #json #Синтаксический анализ #doi

Вопрос:

У меня есть короткий файл JSON из URL

https://api.crossref.org/works?query.title=Tuberculosis drugamp;filter=type:journal-article,from-print-pub-date:2010,until-print-pub-date:2010amp;select=DOIamp;rows=3

Я использовал этот код для получения total-results и списка DOI значений

 $crossref_api_url = 'https://api.crossref.org/works?query.title=Tuberculosis drugamp;filter=type:journal-article,from-print-pub-date:2010,until-print-pub-date:2010amp;select=DOIamp;rows=2';

$JSON = file_get_contents($crossref_api_url);
$Array = json_decode($JSON, true);          

$items_list = $message->items; 
$totalItems = $message->total-results;  
echo $totalItems;

for($i = 0; $i < count($items_list ); $i  ) {
    $doi = $items_list[$i]->items->DOI;
    echo $doi;  
}
  

Появится результат 0 . Нет totalItems значения, DOI списка.

Пожалуйста, помогите мне найти ошибку в моем коде. Спасибо

Комментарии:

1. $message ? Где это определено ?

2. И структура, которую вы получили, является { "message": { "items": [{ "DOI": "10.1111/j.1365-2958.2010.07218.x"} , но вы пытаетесь получить доступ к message-> items-> элементы.

Ответ №1:

Правильный код:

 $crossref_api_url = 'https://api.crossref.org/works?query.title=Tuberculosis drugamp;filter=type:journal-article,from-print-pub-date:2010,until-print-pub-date:2010amp;select=DOIamp;rows=2';

$JSON = file_get_contents($crossref_api_url);
$Array = json_decode($JSON, true);          // with `true` you decode to ARRAY

$items_list = $Array['message']['items']; 
$totalItems = $Array['message']['total-results'];  
echo $totalItems;

foreach ($items_list as $item) {
    echo $item['DOI'];  
}
  

Комментарии:

1. Спасибо. Это работает хорошо, но $totalItems не отображается.

2. Это так, проверьте свой код еще раз. Или проверьте выходные данные вашего кода. Для добавления новой строки echo PHP_EOL;