Php json_decode返回的是空值,而不是数组

Php json_decode返回的是空值,而不是数组,php,json,curl,error-handling,Php,Json,Curl,Error Handling,我试图在解码数据中搜索关键字电子邮件。但它无法从json_decode获取数组类型 这是密码 $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => $url, CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleW

我试图在解码数据中搜索关键字电子邮件。但它无法从json_decode获取数组类型

这是密码

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => $url,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
));

$resp = json_decode(curl_exec($curl), true);


if(is_array($resp) && array_key_exists("email", $resp))
{
  echo $data_arr[0] . "email: ";
  $content = $resp["email"];
  fwrite($fp,$content);
}
确切的错误是:

array_key_exists()要求参数2为数组,在index.php的第34行中给出null

编辑:我发现了一些错误。由于错误(url格式错误),卷曲执行失败。仍然无法确定在这种情况下url的格式是如何错误的。url是这样提取的

$data = fgets($fp);
$data_arr = split(",", $data);
$token_arr = isset($data_arr[1]) ? split('"', $data_arr[1]) : null;

$url = isset($token_arr[1]) ? "https://graph.facebook.com/v2.3/me?access_token=" . $token_arr[1] : null;

尝试使用
utf8\u编码

$data = curl_exec($curl);
$data = utf8_encode($data);
$resp = json_decode($data, true);
注意:
utf8\u解码
仅适用于utf8

此函数仅适用于UTF-8编码字符串

PHP实现了原始版本中指定的JSON超集——它还将对标量类型和NULL进行编码和解码。RFC 4627仅当这些值嵌套在数组或对象中时才支持这些值。 尽管此超集与较新版本(旨在取代RFC 4627)中“JSON文本”的扩展定义一致,但这可能会导致在编码单个标量值时严格遵守RFC 4627的较旧JSON解析器出现互操作性问题

资料来源:

如果需要URL中的编码参数,请尝试
urlencode
rawurlecnode
,例如:

注意,我在
中添加了
()

检查发送是否为空 如果
curl\u error
返回
格式不正确
表示
$url=NULL
,则问题出在生成令牌的代码中,请尝试以下操作:

$data = fgets($fp);
$data_arr = split(",", $data);
$token_arr = isset($data_arr[1]) ? split('"', $data_arr[1]) : null;

$url = isset($token_arr[1]) ? ("https://graph.facebook.com/v2.3/me?access_token=" . $token_arr[1]) : null;

if (empty($url)) {
   echo 'URL is NULL or EMPTY';
   exit;
}

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => $url,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
));

$data = curl_exec($curl);
$data = utf8_encode($data);
$resp = json_decode($data, true);

if(is_array($resp) && array_key_exists("email", $resp))
{
  echo $data_arr[0] . "email: ";
  $content = $resp["email"];
  fwrite($fp,$content);
}

在尝试使用之前,应该检查
curl\u exec()的值。显然是
false
,这意味着您的curl调用失败。从
json_decode
的PHP文档中:
NULL返回,如果在
json_encode
之后无法解码json,则写入
json_last_error()
以检查错误是什么。@taxicala已尝试使用json_last_error();它返回0$url变量包含什么?不起作用。现在,将错误显示为参数1的utf8_encode()应该是字符串。这导致了curl成功执行。但是对于json_decode,在$resp变量中仍然有'Null'值,而不是数组。
var_dump($data)给我字符串(0)”,而如果我尝试
var\u dump($resp)返回null。url为
“https://graph.facebook.com/v2.3/me?access_token=" . $令牌\u arr[1]
。我在上面提到了$token_arr[1]的代码。我正在从文件中获取访问令牌值,然后创建要解码的url。urlencode不起作用。不过,我尝试了
var_dump($data,curl_error($curl))并给出bool(false)、string(15),“作为输出。
$data = fgets($fp);
$data_arr = split(",", $data);
$token_arr = isset($data_arr[1]) ? split('"', $data_arr[1]) : null;

$url = isset($token_arr[1]) ? ("https://graph.facebook.com/v2.3/me?access_token=" . $token_arr[1]) : null;

if (empty($url)) {
   echo 'URL is NULL or EMPTY';
   exit;
}

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => $url,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
));

$data = curl_exec($curl);
$data = utf8_encode($data);
$resp = json_decode($data, true);

if(is_array($resp) && array_key_exists("email", $resp))
{
  echo $data_arr[0] . "email: ";
  $content = $resp["email"];
  fwrite($fp,$content);
}