我正在尝试将我的hierarhical列表序列化为json这样的对象;
[
{title: title1,id: 1,children: [
{title: title1_1,id: 1_1,children: [
{title: title1_1_1,id: 1_1_1,children: []},
{title: title1_1_2,id: 1_1_2,children: []}
]}
]},
{title: title2,id: 2,children: [
{title: title2_1,id: 2_2,children: []}
]}
]
我的列表结构如下:
<ol class="sortable">
<li><label>title1</label>
<ol>
<li><label>title1_1</label>
<ol>
<li><label>title1_1_1</label>
<ol></ol>
</li>
<li><label>title1_1_2</label>
<ol></ol>
</li>
</ol>
</li>
</ol>
</li>
<li><label>title2</label>
<ol>
<li><label>title2_1</label>
<ol></ol>
</li>
</ol>
</li>
</ol>
我已经编写了序列化函数:
function toJson(object, jsonObject) {
return jsonObject
+ "{\"title\":\""
+ object.children('label').text()
+ "\", \"children\":\""
+ listToJson(object.children("ol").children("li"),jsonObject)
+ "\"}";
}
function listToJson(list,jsonObject) {
jsonObject = jsonObject + "[";
list.each(function(idx, li) {
jsonObject = toJson($(li).children('ol'),jsonObject);
});
jsonObject = jsonObject + "]";
return jsonObject;
}
和执行功能:
var jsonObject = "";
jsonObject = listToJson($("ol.sortable > li"),jsonObject);
但我无法让它发挥作用。我认为这是因为当我打电话给.children(ol)
时,它会在整个结构中停止而不是在第一级停止。
任何人都可以帮助我吗?
答案 0 :(得分:1)
我不确定你为什么要使用手动创建JSON,我不建议你这样做。这是一个非常简化的东西:
的Javascript
$(document).ready(function()
{
function toObject(element)
{
var result = [];
// make sure we're using jquery elements
var $element = $(element);
var $children = $element.children('li');
$children.each(function()
{
var $this = $(this);
var item = {};
item.title = '';
var $label = $this.find('label').first();
if ($label.length == 1)
{
item.title = $label.text();
}
// should only be one OL
var $grandchild = $this.children('ol').first();
item.children = toObject($grandchild);
result.push(item);
});
return result;
}
var $target = $('ol.sortable');
var o = toObject($target);
var json = JSON.stringify(o);
$('pre').text(json);
});
结果(无论如何更好的JSON):
[{“title”:“Faza przygotowawcza”,“children”:[{“title”:“Uzyskaj dane kontaktowe klienta”,“children”:[{“title”:“Wizytówkaklienta”,“children”: []},{“title”:“Ankieta-Dane klienta”,“children”:[]}]}]},{“title”:“Faza realizacji”,“children”:[{“title”:“Wprowadź klienta do systemu“,”children“:[]}]}]
我没有添加ID,但是如果你真的需要它,请告诉我这个代码并不难。