Как разобрать данные Json из openlibrary api? (должным образом)

Простите меня, если на это будет дан ответ. Я видел различные ответы на данные json и openlibrary

До сих пор данные json, которые я получаю от openlibrary, и данные json, которые я вижу в примерах, кажутся разными в формате

Мой вопрос: использовать php (или javascript), как я могу получить данные в массив или indavidual переменные и поместить их в базу данных mysql.

  • дополнение к предыдущему вопросу – я хотел бы отобразить необработанные данные ниже:

Название: Плитка книги Автор: Автор книги Isbn: Номер Isbn и т. Д.

а затем поместить эти данные в базу данных mysql

[Обновить 2015-011-07] Теперь я получил ответ, я обновил код ниже, чтобы показать, как это должно быть. Следующее запросит json-данные из openlibrary, и оно будет возвращено в виде строки. номер ISBN в $ url предназначен только для целей тестирования, поэтому обязательно замените его.

<?php $url ="https://openlibrary.org/api/books?bibkeys=ISBN:0789721813&jscmd=details&format=json"; $headers = array( "Content-type: application/json;charset=\"utf-8\"", "Accept: text/xml", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: \"run\"" ); $cURL = curl_init(); curl_setopt($cURL, CURLOPT_URL, $url); curl_setopt($cURL, CURLOPT_HTTPGET, true); curl_setopt($cURL, CURLOPT_HTTPHEADER, $headers); curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($cURL); foreach (json_decode($result, true) as $book) { printf("\nISBN: %s\ttitle: %s\tauthor: %s", $book['details']['isbn_10'][0], $book['details']['title'], $book['details']['contributions'][0]); } curl_close($cURL); ?> 

Когда страница загружается, отображается следующее:

 ISBN: 0789721813 title: Red Hat Linux author: Hellums, Duane 

По умолчанию cURL автоматически выводит передачу. В вашем коде отображается только содержимое json, но curl_exec($cURL) возвращает 1 или 0, если что-то не так, а не содержимое json. Вот почему вы не можете получить массив или объект, который вы хотите с помощью json_decode , строка JSON не находится в переменной $result .

Чтобы получить то, что вы хотите, вам нужно установить другую опцию cURL:

 curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1); 

Таким образом curl_exec($cURL) вернет передачу как строку и больше не будет выводить ее автоматически.

См. Руководство по PHP о возвращаемых значениях curl_exec .

Тогда вам нужно использовать только json_decode :

 foreach (json_decode($result, true) as $book) { printf("\nISBN: %s\ttitle: %s\tauthor: %s", $book['details']['isbn_10'][0], $book['details']['title'], $book['details']['contributions'][0]); } 

это может помочь

 echo 'title : '.$book['details']['title'].'<br />'; echo 'subtitle : '.$book['details']['subtitle'].'<br />'; echo 'lc_classifications : '.$book['details']['lc_classifications'][0].'<br />'; echo 'latest_revision : '.$book['details']['latest_revision'].'<br />'; echo 'edition_name : '.$book['details']['edition_name'].'<br />'; echo 'languages : '.$book['details']['languages'][0]['key'].'<br />'; echo 'subjects : '.$book['details']['subjects'][0].'<br />'; echo 'location : '.$book['details']['location'][0].'<br />'; echo 'type : '.$book['details']['type']['key'].'<br />'; echo 'publish_country : '.$book['details']['publish_country'].'<br />'; echo 'other_titles : '.$book['details']['other_titles'][0].'<br />'; echo 'publishers : '.$book['details']['publishers'][0].'<br />'; echo 'last_modified : '.$book['details']['last_modified']['value'].'<br />'; echo 'key : '.$book['details']['key'].'<br />'; echo 'authors : '.$book['details']['authors'][0]['name'].'<br />'; echo 'publish_places : '.$book['details']['publish_places'][0].'<br />'; echo 'pagination : '.$book['details']['pagination'].'<br />'; echo 'works : '.$book['details']['works'][0]['key'].'<br />'; echo 'isbn 10 : '.$book['details']['isbn_10'][0].'<br />';