php数组为javascript格式?

时间:2014-08-13 11:46:06

标签: javascript php jquery video.js

我有一个数组。

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);
        });

它给了我错误。我不知道如何以所需的格式获取数据。有什么帮助吗?

3 个答案:

答案 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格式是JavaScript文字语法的子集
  • 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); ?>;