我有一个数组。
Array
(
[0] => Array
(
[title] => Badminton Men's Singles Gold Medal Kashyap Parupalli
[mp4] => http://www.tensports.com/media/video/kashyap.mp4
[webm] => http://www.tensports.com/media/video/kashyap_VP8.webm
[playThumb] => {filedir_2}Kashyap_medal.jpg
[videoPoster] =>{filedir_3}Kashyap_medal.jpg
)
[1] => Array
(
[title] => Boxing Men's Welter (69kg) Silver medal: Mandeep Jangra
[mp4] => http://www.tensports.com/media/video/MandeepJangraMedal.mp4
[webm] => http://www.tensports.com/media/video/MandeepJangraMedal_VP8.webm
[playThumb] => {filedir_2}Mandeep_Jangra_medal.jpg
[videoPoster] =>{filedir_3}Mandeep_Jangra_medal.jpg
)
)
我正在尝试将其转换为如下所示的对象。
需要Javascript格式:
videos = [
{
src : [
'http://www.tensports.com/media/video/kashyap_VP8.webm',
'http://www.tensports.com/media/video/kashyap.mp4'
],
poster : '{filedir_2}Kashyap_medal.jpg',
title : "Badminton Men's Singles Gold Medal Kashyap Parupalli"
},
{
src : [
'http://www.tensports.com/media/video/MandeepJangraMedal.mp4',
'http://www.tensports.com/media/video/MandeepJangraMedal_VP8.webm'
],
poster : '{filedir_2}Mandeep_Jangra_medal.jpg',
title : "Boxing Men's Welter (69kg) Silver medal: Mandeep Jangra"
}
];
我做了什么:
var videoObject = $.parseJSON(<?php echo $js_VideoURL ?>);//where $js_VideoURL = json_encode($above-array);
$.each(videoObject, function(key, value) {
console.log('stuff : ' + key + ", " + value);
});
它给了我错误。我不知道如何以所需的格式获取数据。有什么帮助吗?
答案 0 :(得分:2)
你在javascript中期望的格式与你给出的php数组不兼容。
从那里开始我假设这是问题,因为你没有给出你遇到的确切错误信息。从我可以收集到的内容中,你错过了一段PHP来将视频放入正确的格式。要解决此问题,您可以执行以下操作:
注意代码中的注释,它们应该解释发生了什么。
PHP:
// $videos is assumed to be the array you've given in your question
$arr = [];
foreach ($videos as $video) {
// Create video object
$obj = new stdClass;
$obj->src = [
$video['webm'],
$video['mp4']
];
$obj->poster = $video['playThumb'];
$obj->title = $video['title'];
$arr[] = $obj;
}
// $arr is now the output you would need for processing
使用Javascript:
var videoObject = <?php echo $js_VideoURL ?>; //where $js_VideoURL = json_encode($arr);
$.each(videoObject, function(key, value) {
console.log('stuff : ' + key + ", " + value);
});
修改强>
你的第一个错误就是Quentin提到你将json直接放入javascript中,这意味着它将被解释为本机javascript对象。我错过了原来的答案。
这意味着您确实不需要使用$.parseJSON
来获取所需的对象。我改变了我的回答以反映这一点。
注意:强>
您的代码暗示您的php / html模板中有Javascript片段。这被认为是不好的做法,可以相对容易地解决。
你可以做的是将json放在页面上相关html元素的data属性中(在打印之前转义json)然后在初始化时使用jQuery拾取json字符串
var object = $element.data('json');
使用这个(jQuery会自动尝试将字符串解析为json),它就可以使用了。
答案 1 :(得分:1)
json_encode
输出JSON(如果只是在JS中转储,将被视为文字)parseJSON
获取JSON的字符串并将其转换为数据结构因此:不要使用parseJSON
,因为它会将您拥有的对象强制转换为字符串("[Object object]"
),然后尝试将其解析为JSON。
只需:
var videoObject = <?php echo $js_VideoURL ?>;
答案 2 :(得分:-2)
加油..你甚至检查过PHP文档,甚至google json编码!?!?!
var videoObject = <?php echo json_encode($js_VideoURL); ?>;