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

How to put array of objects into new Json object

本文关键字:对象 Json 数组      更新时间:2023-09-26

我的页面上有几个下拉列表。基于这些下拉菜单的选择,我想构建如下所示的Json对象:

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

下拉列表事件:

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

当然,我希望这是尽可能通用的,因此我得到$id(在我的情况下是"城市"answers"企业名称",但它可能是不同的在另一个页面。

$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"]}]}

and NOT what I want.

我该怎么做?由于

由于您希望列表是一个对象,所以不要将其创建为数组。

var jsonObj = {
     list: {}
};
$(".chosen-select").each(function () {
    var id = this.id,
        value = $(this).val();
    jsonObj.list[id] = value;
});

在http://jsfiddle.net/gaby/4f43Q/演示

jsonObj.list应该是你想要的对象,而不是一个数组,所以你不应该push到它。

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);