PHP web服务的json数组响应

PHP web服务的json数组响应,php,mysql,json,Php,Mysql,Json,在这个服务中,我得到了输出,但我想要不同的输出。 让我解释一下: $customer_id = $_POST['customer_id']; $response = array(); $qry="SELECT category FROM nesbaty_customer where c_id='".$customer_id."' "; $qry_res=mysqli_query($con,$qry); $jsonData = array(); wh

在这个服务中,我得到了输出,但我想要不同的输出。 让我解释一下:

    $customer_id = $_POST['customer_id'];
    $response = array();
    $qry="SELECT category FROM nesbaty_customer where c_id='".$customer_id."' ";
    $qry_res=mysqli_query($con,$qry);
    $jsonData = array();
    while ($array = mysqli_fetch_assoc($qry_res)) 
    {
        $r= $array['category'];

        $jsonData[]=explode(",",$r);

    }
    echo json_encode(array('data' =>$jsonData));
    mysqli_close($con);
我得到如下输出:

{
"data": {
    "category": [
        "Hotel",
        "Saloon"
    ]
}
Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [category] => Hotel
                )
            [1] => Array
                (
                    [category] => Saloon
                )
        )
)
}

但我想要这样的输出

{"data":[{"category":"Hotel"},{"category":"Saloon"}]}

你不能得到你想要的,因为你会有一个数组有两个相同的键。您可以通过更改以下内容获得类似的结果:

$r= $array['category'];
$jsonData[]=explode(",",$r);

$jsonData
将如下所示:

{
"data": {
    "category": [
        "Hotel",
        "Saloon"
    ]
}
Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [category] => Hotel
                )
            [1] => Array
                (
                    [category] => Saloon
                )
        )
)
json_encode
的输出将是:

{"data":[{"category":"Hotel"},{"category":"Saloon"}]}

数组的键必须是唯一的($array=mysqli\u fetch\u assoc($qry\u res)) {

    $jsonData[]=$array;

}
echo json_encode(array('data' =>$jsonData));

键应该是唯一的,您不应该重复“类别”作为键

“名称都是唯一的对象在某种意义上是可互操作的 所有接收该对象的软件实现都将同意 名称-值映射。当对象中的名称不是 唯一性,接收此类对象的软件的行为是 不可预测。”

有关JSON定义,请参阅

如您所见,使用此rfc: “PHP实现了原始»RFC 7159中指定的JSON超集。”


如果确实要编写非唯一键,则应编写自定义json编码函数,但解码函数将具有不可预测的行为。

将每个类别添加为单独的json对象,然后:

while ($array = mysqli_fetch_assoc($qry_res)) {
    foreach ($array['category'] as $categoryName) {
        $jsonData[] = ['category' => $categoryName];
    }
}

这样你就得到了一个对象数组,这样你就没事了。

当你写下它时,它有重复的键类别,所以你无法得到它category是我的db表字段名这里它是同一个数组中两个元素的键Danger:你很容易受到你自己需要的元素的攻击。哦,伙计们!我想分解它将返回的两个类别在一个!!{“数据”:{“类别”:[“酒店”,“沙龙”]}这是我的输出,但我想要这个{“数据”:[{“类别”:“酒店”},{“类别”:“沙龙”}}但这就是这个代码的输出…你确定你复制的正确吗?再次告诉我上面的两行将被你的代码替换?兄弟首先理解我的查询!多个数据在一行内爆,并希望像这样分解所有数据{“数据”:[{“类别”:“酒店”},{“类别”:“沙龙”}]}我们谈论的不是数据库键,而是JavaScript对象键