首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将带有方括号的JSON数组数据放入JQuery模板

如何将带有方括号的JSON数组数据放入JQuery模板
EN

Stack Overflow用户
提问于 2014-10-08 10:04:41
回答 1查看 1.8K关注 0票数 1

如何在JQuery模板中访问这个json数据对象中的不同属性?

输入json数据:

代码语言:javascript
复制
 `[ [ [ "Title", "Awakening Now" ], [ "Date", "2012-05-25" ], [ "VideoDescription", "Test video awakening now" ], [ "Language", "english" ], [ "Category", "special" ], [ "VideoLink", "http://www.premanandasatsangtvarchive.org/international/2013-05-25enL.mp4" ], [ "HDLink", "http://www.premanandasatsangtvarchive.org/international/2013-05-25en.mp4" ], [ "PosterFrame", "http://www.premanandasatsangtvarchive.org/archive/images/2013-05-25.jpg" ], [ "id", "2" ], [ "TitleGerman", "testtitlegerman" ], [ "SubtitleGerman", "testsubtitlegerman" ] ], 

[ [ "Title", "Glimpses of Our True Nature." ], [ "Date", "2012-05-16" ], [ "VideoDescription", "testvideo glimpses" ], [ "Language", "english" ], [ "Category", "archives" ], [ "VideoLink", "http://www.premanandasatsangtvarchive.org/international/2012-05-18enL.mp4" ], [ "HDLink", "http://www.premanandasatsangtvarchive.org/international/2012-05-18en.mp4" ], [ "PosterFrame", "http://www.premanandasatsangtvarchive.org/archive/images/2012-05-18.jpg" ], [ "id", "1" ], [ "TitleGerman", "test" ], [ "SubtitleGerman", "test" ] ] ]`

Javascript:

代码语言:javascript
复制
$.ajax({
      url: 'scripts/videodatabasehandler.php',
      type: 'post',
      data: {'language': lang},
      success: function(data, status) {
        var sattv=jQuery.parseJSON(data);


         // Render the books using the template
        $("#videoTemplate").tmpl(sattv[0]).appendTo("#videoContainer");

         if(data == "ok") {
            console.log(data);
          alert("hallo"+data);
        }
      },
      error: function(xhr, desc, err) {
        console.log(xhr);
        console.log("Details: " + desc + "\nError:" + err);
      }
    }); // end ajax call
  });

JQuery模板和html的代码:

代码语言:javascript
复制
   <div id="videoContainer"></div>



      <script id="videoTemplate" type="text/x-jQuery-tmpl">
            <div class="date">${Date}</div>
            <br/>
                <div class="title">${Title}</div>
            <br/>
            </div>
            <video id="2013-05-25en" class="sublime" data-initial-overlay-enable='false' 
            poster="http://www.premanandasatsangtvarchive.org/archive/images/2013-05-25.jpg" 
            width="100%" title="EN Changes" data-uid="2013-05-25en" preload="none">
      <source src="http://www.premanandasatsangtvarchive.org/international/2013-05-25enL.mp4" />
      <source src="http://www.premanandasatsangtvarchive.org/international/2013-05-25en.mp4" data-quality="hd" />
        </video>    
        <br /><br />
        New item..

        </script>

示例页面:side/视频存档.side

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 10:53:05

问题是,包含电影列表的json包含数组中的字段,因此使用jQuery.parseJSON(data);的每一部电影得到的是一个字段数组,其中每个字段本身就是一个包含2项fieldName和值的数组。您的服务器没有发送json对象数组,其中json中的每个字段都是电影的属性!

例如,如果您用console.log(sattv[0]);记录您的第一个视频,您将在控制台中看到如下所示:

[Array2,Array2,Array2]

要找到标题,您需要访问视频中的第一个数组,然后访问它的第二个元素(如console.log(sattv[0][0][1]) )。

在模板中很难这样工作(而且容易出错,因为您的代码将依赖于字段的顺序),因此您可以将这些数组转换为适当的json对象。您可以编写一些代码,这些代码将遍历数组,将初始的sattv转换为适当的电影数组( json对象):

代码语言:javascript
复制
var getMovies = function(moviesArray){
    var movies = [];
    if(!moviesArray || !moviesArray.length) return;
    $.each(moviesArray, function(index, elem){
        movies.push(getSingleMovie(elem));
    });
    return movies;
}

var getSingleMovie = function(fieldsArray){
    var movie = {};
    if(!fieldsArray || !fieldsArray.length) return;
    $.each(fieldsArray, function(index, field){
        movie[field[0]] = field[1]; //example: movie["Title"] = "Awakening Now"
    });
    return movie;
}

这样您就可以执行var movies = getMovies(sattv);了,现在如果您查看一下movies[0],您会注意到它是一个正确的json对象,您可以像在movies[0].Title中那样按名称访问它的属性。

因此,您现在可以使用转换的对象呈现第一部电影,如下所示:

代码语言:javascript
复制
$("#videoTemplate").tmpl(movies[0]).appendTo("#videoContainer");

我已经创建了小提琴,所以您可以尝试一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26254235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档