如何将对象数组放入新的Json对象中

时间:2014-08-05 13:47:34

标签: javascript jquery json

我的页面上有几个下拉列表。根据这些下拉列表的选择,我想构建如下所示的结果Json对象:

{"list":{"city":["1","2","3"],"businessName":["City1","AnotherCity"]}}

下拉菜单事件:

    $(".chosen-select").each(function () {
        $id = this.id;
        $value = $(this).val();
    });

当然我希望这样做尽可能通用,因此我得到$ id(在我的情况下是“city”和“businessName”,但在另一页上可能会有所不同。

$value = $(this).val();

当然是所选值的数组,即:“[”1“,”2“,”3“];

我试过这个,但这不是我想要的

    var jsonObj = {
         list: []
    };

    $(".chosen-select").each(function () {
        $id = this.id;
        $value = $(this).val();

        var obj = {};
        obj[$id] = $value;
        jsonObj.list.push(obj);
    });

结果如下:

{"list":[{"city":["2","3"]},{"businessName":["KrakVenue1","KrakVenue3"]}]}

而不是我想要的。

我该怎么办? 感谢

2 个答案:

答案 0 :(得分:2)

由于您希望列表成为对象,因此不要将其创建为数组。

var jsonObj = {
     list: {}
};

$(".chosen-select").each(function () {
    var id = this.id,
        value = $(this).val();

    jsonObj.list[id] = value;
});

http://jsfiddle.net/gaby/4f43Q/

演示

答案 1 :(得分:1)

jsonObj.list应该是你想要的对象而不是数组,所以你不应该推动它。

if (!jsonObj.list.hasOwnProperty(id)) {
    jsonObj.list[id] = value;
}
else {
    // key already exists.  What should you do with it?
    // if `value` is another array, you can use `.concat`
}

似乎value应该是一个数组,但它们是单独的值,并且您希望将它们视为数组,请使用:

if (!jsonObj.list.hasOwnProperty(id)) {
    jsonObj.list[id] = [];
}
jsonObj.list[id].push(value);