Per impostazione predefinita, cURL emette automaticamente il trasferimento. Il tuo codice mostra solo il contenuto json, ma curl_exec($cURL) restituisce 1 o 0 se qualcosa va storto e non il contenuto json. Ecco perché non riesci a ottenere l'array o l'oggetto che desideri con json_decode , la stringa JSON non è nel $result variabile.
Per ottenere ciò che desideri, devi impostare un'altra opzione cURL:
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1);
In questo modo curl_exec($cURL) restituirà il trasferimento come stringa e non lo produrrà più automaticamente.
Consulta il manuale PHP
sui valori restituiti di curl_exec .
Quindi devi solo usare 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]);
}