php - 如何强制仅从 API 响应中提取 JSON 数据?

标签 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"} “真”


如何去掉下面的1true,只获取JSON数据?

我需要为 json_decode() 传入另一个参数吗?

最佳答案

设置 CURLOPT_RETURNTRANSFER curl 选项。 curl_exec 只是返回 true 而不是它,(它回应响应并返回 true;see curl_exec return values)和json_decode(true) 为真。

How would one go about and debug this further?

要试验的几件事:

  1. 删除 $userInfo = json_decode($userInfo, true);dd($用户信息);。如果没有设置 CURLOPT_RETURNTRANSFER 选项,您应该仍然看到未解码的 JSON,但看不到 true1

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

关于php - 如何强制仅从 API 响应中提取 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141560/

相关文章:

php - Wordpress 菜单选择状态

c - 当来自 C# 时,试图理解在 C 中添加到数组

Eclipse的JSON格式化程序

php - 如何从 MySQL 获取整数作为 PHP 中的整数?

php - 为什么在 PHP 中禁用 E_WARNING 被认为是不好的做法?

php - cs50 pset7 php查询函数where子句中的未知列

C++在不知道大小的情况下越界时检测悬挂指针

如果对象包含字符串,Javascript从数组中删除对象

javascript - 将 &lt;input&gt; 值读取为数字而不是字符串 (JavaScript)

ios - Swift解析json并传输数据