我试图解析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":""}
]}
有人可以帮助我找到我做错的事吗?
答案 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'];
}