如何从div的id创建json obj或数组?

时间:2012-03-21 21:11:17

标签: jquery json each attr

我有一种情况,我需要从我页面上的一些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

返回4个对象

我需要以某种方式将它们组合起来,以便结果如下:

ids: "167"
comment: {
    id: "129"
    id: "130"
}

ids: "166"
comment: {
    id: "134"
    id: "136"
}

我想我需要在第一个foreach中做另一个foreach并将其他id添加到json中,但是,我不知道该怎么做。

任何想法?

3 个答案:

答案 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']}
];

如果您对上述构造感兴趣,请参阅下面的代码,

DEMO

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"
            }
        ]
    },
    {
        ....
    }
]