我有ol结构作为html,我想从中创建JSON,但我的代码不会创建我需要的JSON。任何人都可以帮我解决它吗?如何创建从深li结构的json输出
我需要这样的
[
{"en":"Menu1","enlink":"#enlink1","tr":"Menü 1","trlink":"#trlink1","data":[
{"en":"Menu1-1","enlink":"#enlink1-1","tr":"Menü 1-1","trlink":"#trlink1-1","data":[
{"en":"Menu1-1-1","enlink":"#enlink1-1-1","tr":"Menü 1-1-1","trlink":"#trlink1-1-1"},
{"en":"Menu1-1-2","enlink":"#enlink1-1-2","tr":"Menü 1-1-2","trlink":"#trlink1-1-2"}
]},
]},
{"en":"Menu2","enlink":"#enlink2","tr":"Menü 2","trlink":"#trlink2","data":[
{"en":"Menu2-1","enlink":"#enlink2-1","tr":"Menü 2-1","trlink":"#trlink2-1"},
{"en":"Menu2-1","enlink":"#enlink2-1","tr":"Menü 2-1","trlink":"#trlink2-1"}
]},
{"en":"Menu3","enlink":"#enlink3","tr":"Menü 3","trlink":"#trlink3"}
]
而且我的样本代码创建JSON ..
var buildJson = function (root){
\t if(!root){
\t \t root='#domenu-en';
\t }
\t var result = [];
\t $(' ol > li ',root).each(function() {
\t \t if($(this).children("ol").length){
\t \t \t result.push({"en":$(this).attr("data-en"),"data":buildJson($(this))});
\t \t \t //return false;
\t \t } else{
\t \t \t result.push({"en":$(this).attr("data-en")});
\t \t }
\t });
return result;
}
$('#results').val(JSON.stringify(buildJson()))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="domenu-en">
<ol>
\t <li data-enlink="#enlink1" data-en="Menu1" data-trlink="#trlink1" data-tr="Menü 1">
\t \t <ol>
\t \t \t <li data-enlink="#enlink1-1" data-en="Menu1-1" data-trlink="#trlink1-1" data-tr="Menü 1-1">
\t \t \t \t <ol>
\t \t \t \t \t <li data-enlink="#enlink1-1-1" data-en="Menu1-1-1" data-trlink="#trlink1-1-1" data-tr="Menü 1-1-1">
\t \t \t \t \t </li>
\t \t \t \t \t <li data-enlink="#enlink1-1-2" data-en="Menu1-1-2" data-trlink="#trlink1-1-2" data-tr="Menü 1-1-2">
\t \t \t \t \t </li>
\t \t \t \t </ol>
\t \t \t </li>
\t \t </ol>
\t </li>
\t <li data-enlink="#enlink2" data-en="Menu2" data-trlink="#trlink2" data-tr="Menü 2">
\t \t <ol>
\t \t \t <li data-enlink="#enlink2-1" data-en="Menu2-1" data-trlink="#trlink2-1" data-tr="Menü 2-1">
\t \t \t </li>
\t \t \t <li data-enlink="#enlink2-1" data-en="Menu2-1" data-trlink="#trlink2-1" data-tr="Menü 2-1">
\t \t \t </li>
\t \t </ol>
\t </li>
\t <li data-enlink="#enlink3" data-en="Menu3" data-trlink="#trlink3" data-tr="Menü 3">
\t </li>
</ol>
</div>
<textarea id="results" style=" height: 279px;"></textarea>
感谢您的杰出贡献者@Thomas van den Berg,但每次我们再次调用函数时,都会生成其他对象。在结果我有更大的JSON在那里shoıuld是一个** Menu1-1-1 **,但在此代码和我的不同孩子生成4个相同的项目。 '$('ol> li',root).each(function()'也可以接触到子li,我们必须打断这个过程以达到子li。 –
很高兴听到你找出问题所在 – Thomas