我从 JSON 检索数据时遇到了一些问题,它总是说为 foreach() 提供的参数无效,这是 url 中的 JSON.php :
[{"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,但仍然没有结果,对此有什么想法吗?
提前致谢
您需要显式json_decode
输出转换为数组。喜欢这个:
$koyim = (array)json_decode($json);
我遇到了与您完全相同的问题,这解决了我的问题。
由于您的 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中搜索更精确的错误,以防万一。最喜欢它的"JSON_ERROR_UTF8"。
为此,您可以尝试以下代码: $url = "网址.php";
$json = file_get_contents($url);
$json = iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($json));
$koyim = json_decode($json,true);
我也遇到了这个错误,我已经用这个解决了它:
$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/>";
}
只需像这样删除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
并从那里引用一句话:
副会长 如果为 TRUE,则返回的对象将转换为关联数组。
请查看您在呼叫json_decode
时设置为true
的assoc标志: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/>";
}
?>