JSON为foreach()提供的参数无效

时间:2015-01-09 02:40:12

标签: php arrays json

我有一些问题要从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,但仍然没有结果,对此有任何想法吗?

提前致谢

5 个答案:

答案 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/>";
    }