将JSON转换为HTML

时间:2016-10-10 21:55:41

标签: javascript jquery html json

我有一个json文件,其中包含我想要使用jquery函数移动到特定html ID的歌曲列表。这是我的json文件中的五首歌曲中的两首(都遵循相同的格式:

{
    "songs": [
        {
            "title": "Hotel California",
            "artist": "Eagles",
            "album": "Hotel California",
            "album_cover": "https://en.wikipedia.org/wiki/Hotel_California_(Eagles_album)#/media/File:Hotelcalifornia.jpg",
            "release_date": "1976",
            "site": "http://www.allmusic.com/album/hotel_california",
            "generes": "Rock"
        },
        {
            "title": "Back in Black",
            "artist": "ACDC",
            "album": "Back in Black",
            "album_cover": "http://www.billboard.com/files/styles/review_main_image/public/media/acdc-back-in-black-album-cover-650.jpg",
            "release_date": "1980",
            "site": "http://www.allmusic.com/album/back_in_black",
            "generes": "Rock"
        }
    ]
}

这是我的html,我试图将我的数据加载到:

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  <title>Json</title>
</head>
<body>
  <a id="site" href="#">
    <img id="coverart" src="noalbum.png" />
  </a>
  <h1 id="title"></h1>
  <h2 id="artist"></h2>
  <h2 id="album"></h2>
  <p id="date"></p>
  <ul id="genres">
  </ul>
</body>
<script src="my.js"></script>  
</html>

我正在尝试创建一个用适当的数据填充这些标签的函数,并重复该过程,直到所有的歌曲都被重复为上述html格式。到目前为止,这是我的js文件:

$("a").click(function() {
  GetIndexData()
});

function GetIndexData() {
  var param = "&nocache=" + Math.random() * 1000000;
  $.getJSON('my.js', param, function(data) {
    $.each(data, function(key, val) {
      $('#' + key).html(val);
    })
  });
}

任何帮助都会非常感谢你!

1 个答案:

答案 0 :(得分:0)

所以你要输入一个包含歌曲列表和详细信息的JSON文件。我根据你提供的鳕鱼片来想出这个。

您必须感谢将使用您的数据填充的HTML模板。在这样做时,你将不得不使用类而不是id。我通过forEach循环运行了一系列歌曲来填充所有内容。

我也将你的基因改成了一个阵列;如果是这样的话。如果不是,我也有一个版本将其呈现为单个值。

    function render(data) {
        data.forEach(function(item) {
            var templ = $('<div class="album-wrap"> <a class="site" href="' + item.site + '"><img class="coverart" src="' + item.album_cover + '"/></a><h1 class="title">' + item.title + '</h1><h2 class="artist">' + item.artist + '</h2><h2 class="album">' + item.album + '</h2><p class="date">' + item.release_date + '</p><ul class="genres"></ul></div>'),
                generesLi = templ.find('.genres');

            generesRender(item.generes, generesLi);

            $('body').append(templ);
        });
    }

    function generesRender(arr, elem) {
        arr.forEach(function(item) {
            elem.append('<li>' + item + '</li>');
        });
    }
    render(data);

这就是如果generes不是数组。

 function render(data) {
            data.forEach(function(item) {
                var templ = $('<div class="album-wrap"> <a class="site" href="' + item.site + '"><img class="coverart" src="' + item.album_cover + '"/></a><h1 class="title">' + item.title + '</h1><h2 class="artist">' + item.artist + '</h2><h2 class="album">' + item.album + '</h2><p class="date">' + item.release_date + '</p><p class="genres">' + item.generes + '</p></div>');
                $('body').append(templ);
            });
        }

您的getJSON电话也已关闭。我不接受一个参数(我知道),你不需要它。所以它应该是这样的。

$.getJSON('my.js', function(data) {
    render(data);
});

我使用了页面上的JSON。我看起来像这样。

var data = [{
            "title": "Hotel California",
            "artist": "Eagles",
            "album": "Hotel California",
            "album_cover": "https://en.wikipedia.org/wiki/Hotel_California_(Eagles_album)#/media/File:Hotelcalifornia.jpg",
            "release_date": "1976",
            "site": "http://www.allmusic.com/album/hotel_california",
            "generes": ["Rock", "Country", "Electric"]
        }, {
            "title": "Back in Black",
            "artist": "ACDC",
            "album": "Back in Black",
            "album_cover": "http://www.billboard.com/files/styles/review_main_image/public/media/acdc-back-in-black-album-cover-650.jpg",
            "release_date": "1980",
            "site": "http://www.allmusic.com/album/back_in_black",
            "generes": ["Rock", "Jazz"]
        }];

因此,如果您的数据看起来像这样,那么解决方案应该可行。如果它没有,那么控制台记录它并发布你得到的,我会做出调整。