我一直在构建一个管理数据集的小工具,我正在尝试创建一个JSON输出,以便为我的前端数据提供服务。
现在我在循环的每一行末尾都有一个额外的逗号。我需要删除它,如果我能在while循环中找到一种方法,那将是理想的。
这是我的代码:
$sth = mysql_query("SELECT * FROM mapdata");
$num_rows = mysql_num_rows($sth);
$counter = 0;
echo '[';
while($r = mysql_fetch_assoc($sth)) {
if (++$counter == $num_rows) {
echo json_encode($r) . '';
}
else {
echo json_encode($r) . ',';
}
}
echo "]";
mysql_close($connection);
这就是我现在要归还的内容
[
{"col1":"123","col2":"456","col3":"789",},
{"col1":"123","col2":"456","col3":"789",}
]
这就是我需要的。
[
{"col1":"data1","col2":"data2","col3":"data3"},
{"col1":"data1","col2":"data2","col3":"data3"}
]
任何建议都将不胜感激。
答案 0 :(得分:6)
您的整个方法都是错误的,您不应该尝试手动创建JSON。将所有行放在一个数组中,让json_encode()
为您完成所有操作。
$result = array();
while ($r = mysql_fetch_assoc($sth)) {
$result[] = $r;
}
echo json_encode($result);
答案 1 :(得分:0)
我喜欢尽可能遵循最佳实践,但在这个特殊情况下,由于我有一些环境限制,我需要偏离最佳实践。我以为我会分享我最终使用的解决方案,无论它过于复杂。
$sth = mysql_query("SELECT name,address,address2,city,state,postal,phone,lat,lng FROM mapdata");
$num_rows = mysql_num_rows($sth);
$counter = 0;
echo '[';
while($r = mysql_fetch_assoc($sth)) {
if (++$counter == $num_rows) {
echo preg_replace("/^,/",'',str_replace(',}','}',json_encode($r)));
}
else {
echo preg_replace("/^,/",'',str_replace(',}','}',json_encode($r)) . ',');
}
}
echo "]";
mysql_close($connection);