我有一些问题要从JSON检索数据,它总是说为foreach()提供的无效参数,这是url.php中的JSON:
[{"nama":"IT SERVICE & SOLUTION","nilai":0,"periode":"11","tahun":"2014"},{"nama":"SUBDIV BUSINESS SERVICE","nilai":0,"periode":"11","tahun":"2014"},{"nama":"Data Analytics","nilai":100.1446,"periode":"11","tahun":"2014"}]
这是我的代码:
<?php
$url="url.php";
$json = file_get_contents($url);
$koyim= json_decode($json,true);
foreach($koyim as $data){
echo $data->nilai;
echo $data->nama;
echo "<br/>";
}
?>
我一直在尝试不同的东西来检索json,但仍然没有结果,对此有任何想法吗?
提前致谢
答案 0 :(得分:4)
您需要将json_decode
输出显式转换为数组。像这样:
$koyim = (array)json_decode($json);
我和你的问题完全相同,这解决了我的问题。
答案 1 :(得分:0)
只需删除json_decode()
中的true,如下所示:
$koyim= json_decode($json);
输出:
0 IT SERVICE & SOLUTION
0 SUBDIV BUSINESS SERVICE
100.1446 Data Analytics
因为如果您查看手册:http://php.net/manual/en/function.json-decode.php
从那里引用:
ASSOC 如果为TRUE,则返回的对象将转换为关联数组。
答案 2 :(得分:0)
请致电true
时查看您设置为json_decode
的关联标记:
http://php.net/manual/en/function.json-decode.php
assoc
When TRUE, returned objects will be converted into associative arrays.
当assoc标志设置为true
时,返回的对象将被转换为关联数组,说到这一点,您可以使用[]
而不是->
来访问您的属性
使用以下代码可以正常工作:
<?php
$url="url.php";
$json = file_get_contents($url);
$koyim= json_decode($json,true);
foreach($koyim as $data){
echo $data['nilai'];
echo $data['nama'];
echo "<br/>";
}
?>
答案 3 :(得分:0)
由于您的JSON有效,下一步是检查解码中的PHP错误。
首先尝试使用此代码在解码JSON时检查错误:
<?php
$url="url.php";
$json = file_get_contents($url);
$koyim= json_decode($json,true);
// Add this switch to your code
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
// end of switch
foreach($koyim as $data){
echo $data['nilai'];
echo $data['nama'];
echo "<br/>";
}
?>
一旦您知道错误,就可以从CONSTANT中搜索更精确的错误。最喜欢它的&#39; JSON_ERROR_UTF8&#39;。
为此,您可以尝试以下代码: $ url =&#34; url.php&#34;;
$json = file_get_contents($url);
$json = iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($json));
$koyim = json_decode($json,true);
答案 4 :(得分:0)
我也有这个错误,我已经使用以下方法解决了它:
$koyim = (array)json_decode($json, true);
因此,您的代码应如下所示:
$url = "url.php";
$json = file_get_contents($url);
$koyim = (array)json_decode($json, true);
foreach($koyim as $data) {
echo $data['nilai'];
echo $data['nama'];
echo "<br/>";
}