我学习php和JSON,并且无法弄清楚为什么我有以下输出:
JSON结果:
{
"Results": [
{
"user_id": "1"
},
{
"email": "user@example.com"
},
{
"first_name": "User"
},
{
"last_name": "One"
},
{
"password": "pass1"
},
{
"creation_date": null
},
{
"profile_type": "0"
},
{
"user_id": "2"
},
{
"email": "user2@example.com"
},
{
"first_name": "User"
},
{
"last_name": "Two"
},
{
"password": "pass2"
},
{
"creation_date": null
},
{
"profile_type": "0"
}
]
}
PHP:
<?php
require_once 'config/db.php';
$sql = new db();
$conn = $sql->connect();
$query = isset($_GET['query']) ? mysql_real_escape_string($_GET['query']) : "";
if(!empty($query))
{
$qur = mysql_query($query);
$result = array();
while($r = mysql_fetch_assoc($qur))
{
extract($r);
foreach($r as $key => $value)
{
$result[] = array($key => $value);
}
$json = array("Results" => $result);
}
}
@mysql_close($conn);
/* Output header */
header('Content-type: application/json');
echo json_encode($json, JSON_PRETTY_PRINT);
?>
我的问题是,为什么它将每个值分成新记录,我希望每个MySQL记录都是一个JSON记录。
答案 0 :(得分:4)
只需将您的行分配到$result
:
while($r = mysql_fetch_assoc($qur))
{
$result[] = $r;
}
$json = array("Results" => $result);
答案 1 :(得分:1)
这是因为你的for循环:
foreach($r as $key => $value)
{
$result[] = array($key => $value);
}
也许你应该对返回的数据尝试类似json_encode的东西。
http://php.net/manual/en/function.json-encode.php
编辑:
尝试这样的事情:
$data = array();
while($row = mysqli_fetch_assoc($result))
{
$data[] = $row;
}
echo json_encode($data, JSON_PRETTY_PRINT);
答案 2 :(得分:-3)
我不会使用mysql开始使用PDO。但是,如果你必须,你不需要foreach。下面会做。
while($r = mysqli_fetch_assoc($qur))
{
$result[] = $r;
$json = array("Results" => $result);
}