javascript - 如何使用 javascript/jquery 从嵌套列表生成嵌套的 json 对象

标签 javascript jquery javascript-objects

我想生成以下对象:

var ideaBoard = {
     "Staff Retreat" : {
         "Games" : [
             {"title" : "Rockband", "details" : "1hr"},
             {"title" : "Texas Hold em", "details" : "30min"}
         ],
         "Talks" : [
             {"title" : "The Old You", "details" : "Dr. Smith"}
         ]
     }
}

来自以下 HTML:

<div id="data">
    <ul><span class="board-title">Staff Retreat</span>
        <li><span class="category-title">Games</span>
            <ul>
                <li>
                    <span class="title">Rockband</span>
                    <span class="details">1hr</span>
                </li>
                <li>
                    <span class="title">Texas Hold em</span>
                    <span class="details">30min</span>
                </li>
            </ul>
        </li>
        <li><span class="category-title">Talks</span>
            <ul>
                <li>
                    <span class="title">The Old You</span>
                    <span class="details">Dr. Smith</span>
                </li>
            </ul>
        </li>
    </ul>
</div>

我是循环/数组/对象的新手 - 所以非常感谢您的帮助!

我在这个项目的其他地方使用 jQuery,如果它有帮助的话。

谢谢!

最佳答案

有多种方法。这是一个:

var ideaBoard = {}
$('#data > ul').each(function() {
   var data = {}, // board data
       title = $(this).find('.board-title').text(); // board title

   // find categories
   $(this).find('> li > .category-title').each(function() {
        var category = $(this).text(), // category title

        // we can use map to create the array
        var category_data = $(this).next().children('li').map(function() {
            var tdata = {};

            // each span contains detailed data
            $(this).children('span').each(function() {
                tdata[this.className] = $(this).text();
            });

            return tdata;
        }).get();

        data[category] = category_data;
   });

  ideaBoard[title] = data;
});

DEMO

如果您更改 HTML 的结构,这很可能会中断。如果您有大量这样的数据,此代码也可能会很慢。

要了解使用的方法,请查看 jQuery documentation .

关于javascript - 如何使用 javascript/jquery 从嵌套列表生成嵌套的 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592417/

相关文章:

javascript - 如何迭代此 json 结构以生成另一个结构?

javascript - 在js中转义javascript实体?

Javascript/jQuery : Exporting data in CSV not working in IE

javascript - html动态表

jQuery的scrollTop有点跳动

javascript - JavaScript 对象究竟是如何工作的?我可以将函数声明为 JavaScript 对象的字段吗?

javascript - 在 jCookie 中保存可拖动 div 的位置/位置

php - 在mysql codeigniter中的一个查询中插入和更新

javascript - JQuery:无法禁用 Ajax 响应的元素

backbone.js - Handlebars 嵌套对象