如何仅从API响应中强制抽象JSON数据?

时间:2017-11-06 16:31:02

标签: php arrays json laravel json-deserialization

描述

我正在尝试通过PHP cURL

向API发出请求
$access_token = $tokens['access_token'];
$headers = array(
  "Authorization: Bearer " . $access_token
  );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,env('USER_INFO'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_USERAGENT,'php');
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
$info = curl_getinfo($ch);

$userInfo = curl_exec($ch);
$userInfo = json_decode($userInfo, true);

dd($userInfo);

我一直回来了

{"sub":"acr:123;type=STAT","updated_at":1509463516,"name":"User","email":"user@email.com"} 1

尝试#2

如果我这样做

$userInfo = json_encode($userInfo, true);

我得到了

{"sub":"acr:123;type=STAT","updated_at":1509463516,"name":"User","email":"user@email.com"} "true"

如何摆脱它下面的1true,只获取JSON数据?

我需要传递 json_decode()的另一个参数吗?

问题

如何继续进行调试?

我现在对任何建议持开放态度。

任何提示/建议/帮助都将非常感谢!

2 个答案:

答案 0 :(得分:2)

设置CURLOPT_RETURNTRANSFER卷曲选项。 curl_exec只是在没有它的情况下返回true,(回应响应,返回 true; see curl_exec return values)和{{1}是的。

  

如何进一步调试?

要试验的几件事:

  1. 删除json_decode(true)$userInfo = json_decode($userInfo, true);。如果未设置dd($userInfo);选项,您仍应看到未解码的JSON,但不会看到CURLOPT_RETURNTRANSFERtrue

  2. 1之前添加另一个dd($userInfo);。您会看到json_decode实际返回的内容,这可能会帮助您消除curl_exec这种奇怪行为的可能原因。

答案 1 :(得分:0)

以下行应该可以解决您的问题。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);