Php 如何使用json对象数组生成有效的json输出
我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了我朋友的姓名和位置(以及作为数据库主键的id)。我编写并运行以下php脚本从数据库中检索这些数据,并将它们投影到本地web服务器(XAMPP)上: 总的来说,这不是一个有效的json输出。 我希望得到以下输出:Php 如何使用json对象数组生成有效的json输出,php,json,Php,Json,我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了我朋友的姓名和位置(以及作为数据库主键的id)。我编写并运行以下php脚本从数据库中检索这些数据,并将它们投影到本地web服务器(XAMPP)上: 总的来说,这不是一个有效的json输出。 我希望得到以下输出: [{ "id": "1", "name": "David Belton", "location": "New Haven" }, {
[{
"id": "1",
"name": "David Belton",
"location": "New Haven"
}, {
"id": "2",
"name": "Alex Danson",
"location": "New York"
}]
(这也是一个有效的json输出)
我怎样才能做到这一点呢?之所以会发生这种情况,是因为在循环中,每个对象都与其他对象隔离地发出回声
while ($row = mysqli_fetch_assoc($result))
echo json_encode($row, JSON_PRETTY_PRINT); //<-- echo out an isolated JSON object
创建一个数组并将这些记录推入while循环。在末尾
echo json_encode()代码>因此输出将采用正确的JSON格式
$records = array();
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$records[] = $row;
}
}
echo json_encode($records, JSON_PRETTY_PRINT);
将结果存储在数组中,然后回显编码/格式化的数组:
<?php
$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Friends';
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
header('Content-Type: application/json');
$sql = 'SELECT * FROM friends;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
$arr = array();
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
array_push($arr, $row);
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
或者,不要逐个获取结果,只需使用mysqli\u fetch\u all
if ($resultCheck > 0)
{
$row = mysqli_fetch_all($result);
echo json_encode($row, JSON_PRETTY_PRINT);
}
这实际上更快,占用更少的内存:当然mysqli\u fetch\u assoc($result)
的结果将与$arr
相同,因此可能更简单的解决方案是简单地json\u编码(mysqli\u fetch\u assoc($result),json\u PRETTY\u PRINT)代码>?但是+1作为解释。要点是将检索到的关联数组存储在一个外部数组中,然后JSON对该外部数组进行编码。这将产生OP想要的输出。感谢您的回复。也许我希望它的密度少一点,但它是正确的,所以它是好的。这是非常酷(向上投票)。但是请记住,这将返回一个数组数组,而不是一个简单的数组。谢谢!你是对的,这是一个数组,但在你接受的答案中,$arr
也是一个数组哈哈,我没有意识到这一点,即使测试了它…我最后使用了第二个答案。。。
$records = array();
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$records[] = $row;
}
}
echo json_encode($records, JSON_PRETTY_PRINT);
<?php
$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Friends';
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
header('Content-Type: application/json');
$sql = 'SELECT * FROM friends;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
$arr = array();
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
array_push($arr, $row);
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
if ($resultCheck > 0)
{
$row = mysqli_fetch_all($result);
echo json_encode($row, JSON_PRETTY_PRINT);
}