我有一种情况,我需要从我页面上的一些id创建一些json。
这里有一些代码。还有jsfiddle
<ul class="wall_message">
<li id="167" class="msgid">
<div class="wall_msg">text</div>
<div id="129" class="comments">
<div class="wall_img">commemt</div>
</div>
<div id="130" class="comments">
<div class="wall_img">commemt</div>
</div>
</li>
<li id="166" class="msgid">
<div class="wall_img">text</div>
<div class="wall_msg">
<div id="134" class="comments">
<div class="wall_img">commemt</div>
</div>
<div id="136" class="comments">
<div class="wall_img">commemt</div>
</div>
</div>
</li>
</ul>
var jsonObj = []
var jsonObj1 = [];
$('.msgid').each(function(index,val){
jsonObj.push({ids : $(this).attr('id')});
});
$('.comments').each(function(index,element){
jsonObj1.push({id : $(this).attr('id')});
});
console.log(jsonObj);
console.log(jsonObj1);
这将为jsonObj
返回2个对象,为jsonObj1
我需要以某种方式将它们组合起来,以便结果如下:
ids: "167"
comment: {
id: "129"
id: "130"
}
ids: "166"
comment: {
id: "134"
id: "136"
}
我想我需要在第一个foreach中做另一个foreach并将其他id添加到json中,但是,我不知道该怎么做。
任何想法?
答案 0 :(得分:4)
AndreasAL答案的更简洁的变化:
var jsonObj = $(".msgid").map(function() {
var obj = { id: this.id };
obj.comments = $(".comments", this).map(function() {
return { id: this.id };
}).get();
return obj;
}).get();
答案 1 :(得分:2)
我想出了一个不同的json结构,如下所示,
jsonObj = [
{'ids': '167', 'comments': ['129', '130']},
{'ids': '166', 'comments': ['134', '136']}
];
如果您对上述构造感兴趣,请参阅下面的代码,
var jsonObj = [];
var len, comments;
$('.msgid').each(function(index){
len = jsonObj.push({'ids' : $(this).attr('id')});
comments = [];
$(this).find('.comments').each (function () {
comments.push($(this).attr('id'));
});
jsonObj[len - 1]['comments'] = comments;
});
console.log(jsonObj);
答案 2 :(得分:1)
var jsonObj = [];
$('.msgid').each(function(){
var obj = {
id: this.id,
comments: []
};
$(".comments", this).each(function() {
obj.comments.push({
id: this.id
});
});
jsonObj.push(obj);
});
console.log(jsonObj);
这将输出:
[
{
id: "167",
comments: [
{
id: "129"
},
{
id: "130"
}
]
},
{
....
}
]