javascript - 如何通过子节点递归并输出为json?

标签 javascript jquery json

我有一个嵌套的无序列表,我正在尝试将列表中的所有数据存储为 JSON 格式数据:

以下是我的 HTML 代码:

<nav id="nav">
    <ul class="header-top-nav">
        <li>
            <a href="index.html">Home</a>
            <ul>
                <li><a href="subhome1.html">Home 1</a>
                    <ul>
                        <li><a href="subsubhome1.html">Sub Home</a></li>
                    </ul>
                </li>
                <li><a href="subhome2.html">Home 2</a></li>
                <li><a href="subhome3.html">Home 3</a></li>
            </ul>
        </li>
    </ul>
</nav>

我的 JQuery:

content = [];
$('nav > ul').find('li').each( function () {

        pages = {};
        function menu() {
            pages['pagelink'] = $(this).children('a').attr('href');
            pages['pagename'] = $(this).children('a').text();
            var submenucheck = $(this).children('ul').length;
            if(submenucheck){
                pages['submenu'] = [];
                menu();
            }
            else{
                pages['submenu'] = "NULL";
            }
            contents.push(pages);
        }menu();

});

我希望数据格式是这样的:

{
  "pages": [
    {
      "pagelink": "index.html",
      "pagename": "Home",
      "submenu": [
        {
          "pagelink": "subhome1.html",
          "pagename": "Home 1",
          "submenu": [
            {
              "pagelink": "subsubhome1.html",
              "pagename": "Sub Home",
              "submenu": "NULL"
            }
          ]
        },
        {
          "pagelink": "subhome2.html",
          "pagename": "Home 2",
          "submenu": "NULL"
        },
        {
          "pagelink": "subhome3.html",
          "pagename": "Home 3",
          "submenu": "NULL"
        }
      ]
    }
  ]
}

请帮助我实现这一目标。

最佳答案

试试这个

var results = { };

function getData(ul) {
    var data = []
    ul.children('li').each(function() {
        var li = $(this),
            subData = {},
            a = li.children('a'),
            child = li.children('ul');
        subData['pagelink'] = a.attr('href');
        subData['pagename'] = a.text();
        if(child.length) 
            subData['submenu'] = getData(child);	
        data.push(subData);
    })
    return data;
}
results.pages = getData($('nav > ul'));
console.log(results);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav id="nav">
<ul class="header-top-nav">
    <li>
        <a href="index.html">Home</a>
        <ul>
            <li><a href="subhome1.html">Home 1</a>
                <ul>
                    <li><a href="subsubhome1.html">Sub Home</a></li>
                </ul>
            </li>
            <li><a href="subhome2.html">Home 2</a></li>
            <li><a href="subhome3.html">Home 3</a></li>
        </ul>
    </li>
</ul>
</nav>

关于javascript - 如何通过子节点递归并输出为json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38959176/

相关文章:

java - 如何使用 Jackson 将 JSON 对象转换为 Java HashMap?

javascript - 如何检查 'key' 是否正确填充了 JSON 文件中的 'known' 值

javascript - 如何在 Angular 2 应用程序中包含 jquery 库

javascript - Fancybox 中的 SVG

javascript - 使用 Node 通过 Dropbox API 上传到个人帐户

Java GET 返回日期为 13 位数字

jquery - 如何开发 iPad 网络应用程序以应对 wifi 中断

jquery - 是否可以设置异步 :false to $. getJSON 调用

jquery - 剑道网格中基于条件的列的值

javascript - 使用ajax和json保存数据