我刚刚进入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":"春节 音乐","日":0,"舞台":1} {"image_link":"schedule_music.jpg","start_time":"11:00","end_time":"12:00","viet_performer":","english_performer":","viet_event":"Nh?c","english_event":"音乐","天":1,"舞台":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":"春节 音乐","天":0,"舞台":1},{"image_link":"schedule_music.jpg","start_time":"11:00","end_time":"12:00","viet_performer":":"english_performer":","viet_event":"Nh?c","english_event":"音乐","天":1,"舞台":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);