También estoy intentando buscar y analizar JSON en PHP a través de curl. No puedo analizar la respuesta y, en cambio, veo que se descarga en mi pantalla. Aquí hay un código de muestra.
<?php $url = 'XXXXXXXXXXXXXXXXXXXXX'; $cURL = curl_init(); curl_setopt($cURL, CURLOPT_URL, $url); curl_setopt($cURL, CURLOPT_HTTPGET, true); curl_setopt($cURL, CURLOPT_HTTPHEADER, array( 'X-Mashape-Key: XXXXXXXXXXXXXXXXXXXXXXXXX', 'Accept: application/json' )); $result = curl_exec($cURL); ## this seems to be the line printing the response? curl_close($cURL); echo "<br />--------------------------------------------------------<br />"; var_dump($cURL); echo "<br />--------------------------------------------------------<br />"; var_dump($result); echo "<br />--------------------------------------------------------<br />"; $json = json_decode($result); echo "<br />--------------------------------------------------------<br />"; print_r($json); echo "<br />--------------------------------------------------------<br />"; echo $json->word; echo $json->definitions[0]->definition; echo "<br />--------------------------------------------------------<br />"; ?>Y la salida es:
{"word":"incredible","definitions":[{"definition":"beyond belief or understanding","partOfSpeech":"adjective"}]} -------------------------------------------------------- resource(2) of type (Unknown) -------------------------------------------------------- bool(true) -------------------------------------------------------- -------------------------------------------------------- 1 -------------------------------------------------------- --------------------------------------------------------¿Ves cómo aparece mi JSON en la pantalla antes de mi primera declaración de eco? ¿Por qué está pasando esto?
cURL no devuelve la transferencia pero da salida. No debe generar su transferencia. Agregue la opción CURLOPT_RETURNTRANSFER con valor verdadero. También en la respuesta JSON, las definiciones no son un objeto, es una matriz y también se analizarán como una matriz en php. Además, no hay una clave de attachments en respuesta, por lo que no puede acceder a ella.
$url = 'XXXXXXXXXXXXXXXXXXXXX'; $cURL = curl_init(); curl_setopt($cURL, CURLOPT_URL, $url); curl_setopt($cURL, CURLOPT_HTTPGET, true); curl_setopt($cURL, CURLOPT_HTTPHEADER, array( 'X-Mashape-Key: XXXXXXXXXXXXXXXXXXXXXXXXX', 'Accept: application/json' )); curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1); // add this line to catch your response with curl_exec function. $result = curl_exec($cURL); $json = json_decode($result); print_r($json); // this will print parsed json. echo $json->word; echo $json->definitions[0]->definition; // Get First Entry of definitionsUtilice $json = json_decode($json); y luego puedes usar $json['word'] y así sucesivamente.