我有一个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值。
答案 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