簡體   English   中英

PHP Web服務的json數組響應

[英]json array response for PHP web service

在此服務中,我得到輸出,但是我想要不同的輸出。 讓我解釋:

    $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"
    ]
}

}

但是我想要這樣的輸出!

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

您無法完全得到所需的內容,因為您將擁有一個包含兩個相同鍵的數組。 您可以通過更改獲得類似的內容:

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

foreach (explode(',', $array['category']) as $cat) {
    $jsonData[]=array('category' => $cat);
}

$jsonData將如下所示:

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [category] => Hotel
                )
            [1] => Array
                (
                    [category] => Saloon
                )
        )
)

並且json_encode的輸出將是:

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

鍵應該是唯一的,您不應重復“類別”作為鍵。

“一個名稱全都是唯一的對象是可以互操作的,因為所有接收該對象的軟件實現都將同意名稱-值映射。當一個對象中的名稱不是唯一的時,接收該對象的軟件的行為是不可預測的”。

有關JSON的定義,請參見https://tools.ietf.org/html/rfc7159

如您所見, json_encode使用此rfc:“ PHP按照原始»RFC 7159中的指定實現了JSON的超集。”

如果您確實要編寫非唯一鍵,則應編寫自定義json編碼函數,但解碼函數將具有不可預測的行為。

將每個類別添加為單獨的json對象,然后:

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

這樣,您最終將得到一個對象數組,因此應該沒問題。

數組的鍵必須是唯一的

while($ array = mysqli_fetch_assoc($ qry_res)){

    $jsonData[]=$array;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM