Javascript没有double {}将数组转换为Json

时间:2017-08-31 07:26:57

标签: javascript json

我在节点js中有两个并行的mysql查询(为了更快地获取数据),这是从mysql数据库读取并将结果放入javascript对象的javascript代码:

async.parallel({
    aaChannelsCount: function(cb) {
    /* GET - channels */
    pool.query("SELECT JSON_LENGTH(sort) AS channels FROM channels WHERE bouquet='[\"?\"]'",[rows[0].bouquet], function (err, rows, fields) {
    /* CHANNELS - count */
    if (rows.length) {
        data.push( {"channels": rows[0].channels, "radio": 0} );
            };
        });
    },
    aaVideoClub: function(cb) {
        /* GET - videoclub */
        pool.query("SELECT count(id) AS videoclub FROM vod", function (err, rows, fields) {
            /* VIDEOCLUB - count */
            data.push( {"videoclub": rows[0].videoclub} );
            res.json(data); 
        });
    }
    }, function(err, results) {
        if (err) { 
            /* SHOW - unauthorized */
            res.sendStatus(401);
        } else {
            res.json(data);
        }
    }
    );

我正在使用res.json(data)输出:

[{"channels":3,"radio":0},{"videoclub":2}]

需要获得此输出:

{"channels":3,"radio":0, "videoclub":2}

我在代码data.push中使用将mysql的结果添加到js数组对象中然后将其转换为json。但是我无法获得所需的结果。

2 个答案:

答案 0 :(得分:1)

您可以使用Object.assignspread syntax ...将数组转换为参数。



var array = [{ channels: 3, radio: 0 }, { videoclub: 2 }],
    object = Object.assign(...array);
    
console.log(object);




另一个解决方案是,只需要获取一个对象并直接分配属性,而不是

if (rows.length) {
    data.push( {"channels": rows[0].channels, "radio": 0} );
}

使用对象并直接分配

var object = {};

if (rows.length) {
    object.channels = rows[0].channels;
    object.radio = 0;
}

等等。

BTW,在块语句{ ... }之后,不需要分号。

答案 1 :(得分:1)

你可以使用

来做



let arr = [{"channels":3,"radio":0},{"videoclub":2}];

let result = {};
for(let element of arr){
    for(property in element){
        result[property] = element[property];
    }
}

console.log(result);




相关问题