JSON在php中给出奇怪的输出

时间:2017-05-19 11:14:35

标签: php json

我学习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记录。

3 个答案:

答案 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);
    }