PHP CURL错误:数据返回NULL值

时间:2019-04-23 10:19:49

标签: php json curl foreach

我有一个JSON代码,我将其放在名为data.json的JSON文件中

JSON代码为:

[
 {"value":"23","date":"03/2018"},
 {"value":"43","date":"03/2019"},
 {"value":"34","date":"12/2017"},
 {"value":"13","date":"01/2019"},
 {"value":"34","date":"02/2019"}
]

现在,我用来获取数据的php代码如下:

$url = "data.json" ;

$ch = curl_init() ;

curl_setopt($ch, CURLOPT_URL, $url) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch);


curl_close($ch) ;


$data = json_decode($result, true) ;

foreach($data as $mydata)
{
  $data1 = $mydata["value"] ;
  $data2 = $mydata["date"] ;

echo $data1 ." : ". $data2 ;
echo "<br/>";

}

我不明白代码出了什么问题,但是它给出了错误警告

  

为foreach()提供的参数无效

发生这种情况是因为数据返回了 NULL 值,但是我不知道我的JSON数据格式不正确。 格式看起来不错。但是它仍然返回NULL值。

4 个答案:

答案 0 :(得分:0)

如果您使用的是CURL,而不是data.json,则必须提供JSON文件的完整URL

http://localhost/text.json 

从json获取数据的其他选项

$result = file_get_contents($url);

答案 1 :(得分:0)

对我来说很好。请检查。

<?php
      $url = "http://raveesh.rnd/data.json" ;
      $ch = curl_init() ;

      curl_setopt($ch, CURLOPT_URL, $url) ;
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      $result = curl_exec($ch);
      curl_close($ch) ;

      $data = json_decode($result, true) ;

      foreach($data as $mydata)
      {
           $data1 = $mydata["value"] ;
           $data2 = $mydata["date"] ;

           echo $data1 ." : ". $data2 ;
           echo "<br/>";
      }
?>

Output:

 23 : 03/2018
 43 : 03/2019
 34 : 12/2017
 13 : 01/2019
 34 : 02/2019

答案 2 :(得分:0)

这里的问题是:

1-您不能卷曲同一台主机,必须使用函数 file_get_content()来获取json:

<?php

$string = file_get_contents("./data.json");
$data = json_decode($string, true);



foreach($data as $mydata)
{
  $data1 = $mydata["value"] ;
  $data2 = $mydata["date"] ;

echo $data1 ." : ". $data2 ;
echo "<br/>";

}

如果要使用curl,它必须是另一个主机,例如:

<?php

$url = "http://date.jsontest.com" ;

$ch = curl_init($url) ;

$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array('Content-type: application/json')
);

curl_setopt_array( $ch, $options );
$result = curl_exec($ch);

curl_close($ch) ;

$result = json_decode($result, 1);


foreach($result as $key => $mydata)
{
    echo $key ." : ". $mydata ;
    echo "<br/>";
}

所以这取决于您的Json的结构

谢谢

答案 3 :(得分:-1)

仅将cUrl与文件名一起使用时,cUrl认为它是一个url,因此会出现错误

curl: (6) Could not resolve host

如果它是本地文件,我将更喜欢使用file_get_contents ...

$json = file_get_contents("file.json");
put here your json decode and logic

,如果使用url则使用curl。

为回答和帮助您,让我们尝试看看您是否从curl中获取任何错误...

像这样更改代码并更新我们

尝试使用curl_error并检查cUrl是否存在任何错误,

你会得到什么?

$url = "data.json" ;
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $url) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch);

if (curl_error($ch)) {
    $error_msg = curl_error($ch);
}

curl_close($ch) ;

if (isset($error_msg)) {
    // TODO - Handle cURL error accordingly
}

// put here your json decode and logic