Php 如何使用json对象数组生成有效的json输出

Php 如何使用json对象数组生成有效的json输出,php,json,Php,Json,我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了我朋友的姓名和位置(以及作为数据库主键的id)。我编写并运行以下php脚本从数据库中检索这些数据,并将它们投影到本地web服务器(XAMPP)上: 总的来说,这不是一个有效的json输出。 我希望得到以下输出: [{ "id": "1", "name": "David Belton", "location": "New Haven" }, {

我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了我朋友的姓名和位置(以及作为数据库主键的id)。我编写并运行以下php脚本从数据库中检索这些数据,并将它们投影到本地web服务器(XAMPP)上:

总的来说,这不是一个有效的json输出。 我希望得到以下输出:

[{
        "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);
}