Php 如何返回有效的JSON对象?
我刚开始学习php,我遇到了一个返回JSON对象的问题 代码如下:Php 如何返回有效的JSON对象?,php,json,Php,Json,我刚开始学习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 jso
$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”,“Vietu performer”:“english_performer”:“Vietu event”:“english_event”:“Tet”
音乐,“日”:0,“舞台”:1}
{“image_link”:“schedule_music.jpg”,“start_time”:“11:00”,“end_time”:“12:00”,“Vietu performer”:“english_performer”:“Vietu event”:“Nh?c”,“english_event”:“music”,“day”:1,“stage”:0}
//重复一遍
然而,根据JSON验证器,它是一个无效的JSON对象
我希望生成一个有效的JSON,如下所示:
[{“图像链接”:“schedule_music.jpg”,“开始时间”:“17:00”,“结束时间”:“18:30”,“越南表演者”:“英语表演者”:“越南活动”:“英语活动”:“春节”
音乐,“日”:0,“舞台”:1},{“图像链接”:“日程安排”Music.jpg,“开始时间”:“11:00”,“结束时间”:“12:00”,“越南表演者”:“英语表演者”:“越南活动”:“Nh?c”,“英语活动”:“音乐”,“日”: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\u 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]);
关于更新后的代码,问题在于您要单独编码每个片段,而不是一次编码所有数据。试试这个:
$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\u 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);
正确的方法是先生成数据结构,然后对其进行编码:
$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);
这不会产生我需要的结果。这将把每个json对象包装到一个数组中,如so
[{“image\u link”:“schedule\u huong\u sy\u nhan.jpg”,“start\u time”:“13:30”,“end\u time”:“14:00”,“Vietu performer”:“english\u performer”:“huong sy nhan”,“Vietu event”:“english\u event”:“sing”,“day”:“stage”:0}[{“image\u link”:“schedule\u unknown.png.png”,“start\u time”:“21:00”,“end\u time”:,“越南表演者”:“英语表演者”:“越南活动”:“英语活动”:“节日结束”,“日期”:2,“舞台”:1}]
。注意括号。但是,我希望它与预期的输出一样……除非我不理解。如果有帮助,我希望它如这里的解决方案所示:@Pangu除非我遗漏了什么,否则我仍然认为这是您正在寻找的解决方案。我添加了一个额外的示例来澄清。这就是我添加的:echo json_编码([[“图像链接”=>$image_链接,“开始时间”=>$start_时间,“结束时间”=>$end_时间,“越南表演者”=>$Vietu表演者”,“英语表演者”=>$english_表演者”,“越南事件”=>$Vietu事件,“英语事件”=>$english_事件”,“日”=>$day,“舞台”=>$stage])
但是,这不会产生与我提供的更清晰的示例相同的输出。@Pangu您期望的输出包含两个对象。您只传递了一个。请参见我的第二个示例。这不会产生我需要的结果。这会将每个json对象包装到一个数组中,就像这样[{“image\u link”:“schedule\u huong sy nhan.jpg”,“start\u time”“:“13:30”,“结束时间”:“14:00”,“越南表演者”:“英语表演者”:“Huong Sy Nhan”,“越南事件”:“英语表演者”:“歌唱”,“日”:2,“舞台”:0}][{“图像链接”:“日程未知.png”,“开始时间”:“21:00”,“结束时间”:“越南表演者”:“英语表演者”:“越南事件”:“英语表演者”:“节日结束”,“日”:2,“舞台”:1}
。请注意括号。但是,我希望它能像预期的输出一样……除非我不理解。如果它有帮助,我希望它能像这里的解决方案所示:@Pangu除非我遗漏了什么,否则我仍然认为这是您正在寻找的解决方案。我添加了一个额外的示例来澄清。这就是我添加的:echo json\u编码([[“图像链接”=>$image\u链接,“开始时间”=>$start\u时间,“结束时间”=>$end\u时间,“越南表演者”=>$Vietu表演者,“英语表演者”=>$english\u表演者”,“越南事件”=>$Vietu事件,“英语事件”=>$english\u事件”=>$english\u事件,“day”=>$day,“stage”=>$stage]];代码>但是,这不会产生与我提供的更清晰的示例相同的输出。@Pangu预期的输出包含两个对象。你只通过了一个。参见我的第二个示例。