我试图以JSON格式返回数据。所需的格式如下......
{ "projects" : [
{
"title":"title 1",
"image":"Image1",
"subtitle":"subtitle 1",
"about":"Blah Blah Blah"
},
{
"title":"title 2",
"image":"Image2",
"subtitle":"subtitle 2",
"about":"Blah Blah Blah"
}
]}
下面的代码从数据库中获取数据,并在视图中将其作为JSON数据返回。我的总体目标是以正确的JSON格式返回此数据,以便我可以使用视图中的mustaches模板工具查询它。当我将值设置为行,例如..
时,下面的代码非常有效$userInfo["projects"][] = array("title" => $row[0], "subtitle" => $row[1], "about" => $row[3]);
但是,我不想使用此方法,因为我希望响应自动返回行名称和数据。原因是,如果用户向数据库添加新行,它将自动返回响应,而无需在代码中手动添加另一行。
下面的代码是我的api.php文件。
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
$host = "localhost";
$user = "root";
$pass = "root";
$databaseName = "laravel";
$tableName = "projects";
//$row ='';
$con = mysqli_connect('localhost','root','root');
$return = new stdClass();
$return->projects = array();
$result = mysqli_query($con,"SELECT * FROM $tableName");
if($result !== false) {
while($row = mysqli_fetch_object($result)){
$return->projects[] = $row;
}
}
//echo '<pre>';
//print_r($return);
//echo '</pre>';
echo json_encode($return);
当我执行上面的echo '<pre>'
(当前已注释掉)时,我得到以下结果。
stdClass Object
(
[projects] => Array
(
)
)
下面是我将数据作为JSON回显时的结果。有人可以帮帮我。
{"projects":[]}
提前感谢您提出任何建议或提示。
答案 0 :(得分:0)
您应该使用mysql_fetch_assoc,这样您就可以将列的名称作为索引,而不是数字
答案 1 :(得分:0)
如果您坚持坚持使用mysql_*
(因为不推荐使用它们,您不应该这样做),最好使用mysql_fetch_object
。这会简化您的代码:
// initialize object to store return values
$return = new stdClass();
// create empty projects array on return object
$return->projects = array();
$result = mysql_query("SELECT * FROM $tableName");
if($result !== false) {
while($row = mysql_fetch_object($result)) {
$return->projects[] = $row;
}
}
echo json_encode($return);
一些注意事项:
mysql_fetch_object()
自动将列名设置为属性键,因此根本不需要在另一个操作中检索字段名。您还可以使用mysql_fetch_assoc
来获取关联数组(编码为JSON对象表示法的数组相同)。我更喜欢思考和使用对象,因为这最终将是你要编码的东西(JSON没有关联数组概念)。我认为这使得代码读者的意图更加清晰。json_encode()
步骤。这是构建有效JSON的唯一方法。mysql_*
函数来获取新代码。使用mysqli
或PDO
两者都支持从结果集中提取对象