json在php中解析返回尝试获取非对象错误的属性

时间:2016-07-18 19:22:19

标签: php json

我试图解析JSON字符串。在解析之前,我把我的数据放在JSON格式中,但是我得到了一个"试图得到非对象的属性"错误。

这是我的代码:

$querys = "SELECT * FROM image_refrences WHERE building_id=''";
$rows = array();
$responce= array();
$data = $conn->query($querys);

while($row = $data->fetch_assoc()){
    $json['images'][] = array('id' => $row['id'],
                              'url' => $row['image_file'],
                              'location' => $row['location'] );     
}

$responce= json_encode($json, TRUE);
$rows=json_decode($responce,TRUE);

foreach ( $rows->images as $output ) {
    echo $output->id;
}

我的JSON字符串将如下所示:

{"images":[
    {"id":"1","url":"def6a9.jpg","location":""},
    {"id":"2","url":"def6a9.jpg","location":""},
    {"id":"3","url":"fullsize_distr.jpg","location":""}
]}

有人可以帮助我找到我做错的事吗?

1 个答案:

答案 0 :(得分:3)

从中删除第二个参数:$rows=json_decode($responce,TRUE);

使用true,您正在解码为多维数组而不是对象数组,并且您尝试使用$rows->images$output->id的对象语法来访问它。

或者,如果你想将它解码为一个数组,那么保持true参数并使用数组语法来访问结果:

foreach ( $rows['images'] as $output ) {
    echo $output['id'];
}

进行更改后,您的代码应如下所示:

while($row = $data->fetch_assoc()){
    $json['images'][] = array('id' => $row['id'], 'url' => $row['image_file'], 'location' => $row['location'] );
}

$responce = json_encode($json);           // Remove TRUE
$rows = json_decode($responce);           // Remove TRUE

foreach ( $rows->images as $output ) {
    echo $output->id;
}

我可能做了太多的假设。我假设您只是在试验json函数,因为您正在编码为JSON然后立即解码。如果您实际上不需要JSON,则可以跳过所有这些,只需在while循环中输出ID。

while ($row = $data->fetch_assoc()){
    echo $row['id'];
}