簡體   English   中英

如何返回有效的JSON對象?

[英]How to return a valid JSON object?

我剛剛進入php,並且JSON對象的返回存在問題。

這是代碼:

$stmt->bind_result($image_link, $start_time, $end_time, $viet_performer, $english_performer, $viet_event, $english_event, $day, $stage);

            while($stmt->fetch())
            {
                echo json_encode([["image_link" => $image_link,"start_time" => $start_time, "end_time" => $end_time, "viet_performer" => $viet_performer,
                                "english_performer" => $english_performer, "viet_event" => $viet_event, "english_event" => $english_event, "day" => $day,
                                "stage" => $stage]]);

                $stmt->bind_result($image_link, $start_time, $end_time, $viet_performer, $english_performer, $viet_event, $english_event, $day, $stage);
            }

這基本上輸出:

{“ image_link”:“ schedule_music.jpg”,“ start_time”:“ 17:00”,“ end_time”:“ 18:30”,“ viet_performer”:“”,“ english_performer”:“”,“ viet_event”:“ “,” english_event“:” Tet Music“,” day“:0,” stage“:1} {” image_link“:” schedule_music.jpg“,” start_time“:” 11:00“,” end_time“:” 12 :00“,” viet_performer“:”“,” english_performer“:”“,” viet_event“:” Nh?c“,” english_event“:” Music“,” day“:1,” stage“:0}

//再次重復

但是,根據JSON驗證程序,它是無效的JSON對象。

我想產生一個有效的JSON,如下所示:

[{{“ image_link”:“ schedule_music.jpg”,“ start_time”:“ 17:00”,“ end_time”:“ 18:30”,“ viet_performer”:“”,“ english_performer”:“”,“ viet_event”: “”,“ english_event”:“ Tet Music”,“ day”:0,“ stage”:1},{“ image_link”:“ schedule_music.jpg”,“ start_time”:“ 11:00”,“ end_time”: “ 12:00”,“ viet_performer”:“”,“ english_performer”:“”,“ viet_event”:“ Nh?c”,“ english_event”:“ Music”,“ day”:1,“ stage”:0} ]

請注意開始/結尾方括號以及逗號分隔符。

我該如何實現?

這是一個更好的示例(在某處找到),我的輸出類似:

{
    "id": "a1",
    "session": "General",
    "name": "Exhibitor Setup Begins",
    "startTime": "0900",
    "details": "9am Exhibitor Hall",
    "png": "image",
    "speaker1": "Johnson",
    "speaker2": "Nelson",
    "speaker3": ""
}{
    "id": "b1",
    "session": "General",
    "name": "Conference Registration",
    "startTime": "1000",
    "details": "10am Noon Upper Level Lobby",
    "png": "image",
    "speaker1": "Jackson",
    "speaker2": "",
    "speaker3": ""
}

以及我希望輸出如何:

[
    {
        "id": "a1",
        "session": "General",
        "name": "Exhibitor Setup Begins",
        "startTime": "0900",
        "details": "9am Exhibitor Hall",
        "png": "image",
        "speaker1": "Johnson",
        "speaker2": "Nelson",
        "speaker3": ""
    },
    {
        "id": "b1",
        "session": "General",
        "name": "Conference Registration",
        "startTime": "1000",
        "details": "10am Noon Upper Level Lobby",
        "png": "image",
        "speaker1": "Jackson",
        "speaker2": "",
        "speaker3": ""
    }
]

關於更新的代碼,問題在於您正在分別編碼每個片段,而不是一次編碼所有數據。 嘗試這個:

$stmt->bind_result($image_link, $start_time, $end_time, $viet_performer, $english_performer, $viet_event,
    $english_event, $day, $stage);

$data = [];
while ($stmt->fetch()) {
    $data[] = [
        "image_link"        => $image_link,
        "start_time"        => $start_time,
        "end_time"          => $end_time,
        "viet_performer"    => $viet_performer,
        "english_performer" => $english_performer,
        "viet_event"        => $viet_event,
        "english_event"     => $english_event,
        "day"               => $day,
        "stage"             => $stage
    ];
}

echo json_encode($data);

根據問題的早期版本進行回答:

看起來您想要一個對象數組:

echo json_encode([
    [
        "image_link"        => $image_link,
        "start_time"        => $start_time,
        "end_time"          => $end_time,
        "viet_performer"    => $viet_performer,
        "english_performer" => $english_performer,
        "viet_event"        => $viet_event,
        "english_event"     => $english_event,
        "day"               => $day,
        "stage"             => $stage
    ]
]);

請注意,包含字符串鍵的數組將由json_encode轉換為對象。 在上面的代碼中,內部數組成為對象,而外部數組沒有。


這可能是一種更直觀的查看方式:

$objectOne = (object) [
    "image_link"        => $image_link,
    "start_time"        => $start_time,
    "end_time"          => $end_time,
    "viet_performer"    => $viet_performer,
    "english_performer" => $english_performer,
    "viet_event"        => $viet_event,
    "english_event"     => $english_event,
    "day"               => $day,
    "stage"             => $stage
];

$objectTwo = (object) [
    "image_link"        => $image_link,
    "start_time"        => $start_time,
    "end_time"          => $end_time,
    "viet_performer"    => $viet_performer,
    "english_performer" => $english_performer,
    "viet_event"        => $viet_event,
    "english_event"     => $english_event,
    "day"               => $day,
    "stage"             => $stage
];

echo json_encode([$objectOne, $objectTwo]);

正確的方法是先生成數據結構, 然后對其進行編碼:

$foo = [];
while($stmt->fetch()) {
    $foo []= [
         "image_link" => $image_link,
         "start_time" => $start_time,
         "end_time" => $end_time,
         "viet_performer" => $viet_performer,
         "english_performer" => $english_performer,
         "viet_event" => $viet_event,
         "english_event" => $english_event,
         "day" => $day,
         "stage" => $stage];
    ];
}
$json = json_encode($foo);

暫無
暫無

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

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