Javascript 移除方括号并在nodejs/websocket环境中正确接收JSON?

Javascript 移除方括号并在nodejs/websocket环境中正确接收JSON?,javascript,json,node.js,multidimensional-array,websocket,Javascript,Json,Node.js,Multidimensional Array,Websocket,目前我只能使用console.log(auction[index].id)输出特定键(index)的数据

目前我只能使用
console.log(auction[index].id)输出特定键(index)的数据console.log(auction.id)来获取数据。我如何做到这一点

我使用的是nodejs,我的WebSocket接收的数据如下:

42["stream",{"streamArray":[[{"id":20,"pid":2,"nr":4,"price":5.73,"pe":506.08,"duration":14,"hb":361262},{"id":23,"pid":17,"nr":4,"price":5.59,"pe":189.13,"duration":7,"hb":null},{"id":12,"pid":8,"nr":3,"price":5.59,"pe":90.23,"duration":7,"hb":null}]]}]
这是一个多维数组。我觉得一个方括号太多了?(例如,就在
{“id”:20
之前)

通过这种方式,我可以从客户端接收数据:

var socket = io.connect('http://localhost:8000/',{'forceNew':true });
socket.on('stream', function (data) {
$.each(data.streamArray,function(index,auction){    
我是否必须在数据发送到我的WebSocket之前更改代码,或者我是否可以在客户端解决此问题以在变量
拍卖中接收正确的数据?我如何解决此问题

编辑:

这是相关的服务器端代码:

function pollingLoop () {
    if (socketArray.length === 0) {
        // no connections, wait and try again
        setTimeout(pollingLoop, POLLING_INTERVAL);
        return; // continue without sending mysql query
    }
    pool.getConnection(function(err,connection){ 
    if (err) { console.log({"code" : 100, "status" : "connection-db error"}); return; }   
    console.log('connected as ' + connection.threadId);

    var selection = 
        "SELECT * FROM auctions";   
    var streamArray = [], lg = '';  // init of array and log variable                   
        var query = connection.query(selection, function(err, fields, results){

        for (i=0; i < fields.length; i++)
        {
            lg += (fields[i].id+' ('+fields[i].duration+') '+fields[i].price+'€ -');    

            if (somecondition)  
            {
            // mysql update here
            }       
        }
        streamArray.push(fields);
        updateSockets({ streamArray: streamArray });    
        connection.release();
        setTimeout(pollingLoop, POLLING_INTERVAL);  
        console.log(time()+lg+' C: '+socketArray.length);
        });
    }); 
    }
        pollingLoop();

io.sockets.on('connection', function(socket) {  
    socket.on('disconnect', function() {
    clearTimeout(pollingTimer);
    var socketIndex = socketArray.indexOf(socket);
    console.log(time()+'SOCKET-ID = %s DISCONNECTED', socketIndex);
    if (~socketIndex) { socketArray.splice(socketIndex, 1); }
    });  
    console.log(time()+'NEW SOCKET CONNECTED!');
    socketArray.push(socket);
}); 

var updateSockets = function(data) {
    socketArray.forEach(function(tmpSocket) { tmpSocket.volatile.emit('stream', data); });
};
函数轮询循环(){
if(socketArray.length==0){
//没有连接,请稍候,然后重试
设置超时(轮询循环、轮询间隔);
return;//不发送mysql查询继续
}
pool.getConnection(函数(err,connection){
if(err){console.log({“code”:100,“status”:“connection db error”});return;}
log('connected as'+connection.threadId);
变量选择=
“从拍卖中选择*”;
var streamArray=[],lg='';//数组和日志变量的初始值
var query=connection.query(选择、函数(错误、字段、结果){
对于(i=0;i
这是您的问题:

它确实创建了一个多余的单槽数组。我猜您要么想移动
streamArray.push(…)
for
循环的
内部(然后push
字段[i]
或其他),要么就应该这样做

 updateSockets({ streamArray: fields });

并省略所有
streamArray
代码。

如果您认为括号太多,您应该修复服务器端代码(如果您需要帮助,您需要显示它)。否则,如果多维数组有意义,只需嵌套两个循环。我不太确定它是否有意义。情况是,我重写了服务器端代码,并注意到以前比现在少了一个方括号。这就是为什么我必须使用
拍卖[索引].id
而不是现在的
auction.id
。而且以后还有另一个循环可以创建倒计时计时器,所以我不确定是否应该在客户端创建一个额外的循环,或者这是否会进一步降低用户的浏览速度?我必须说,我对javascript/nodejs非常陌生。看起来它应该只是一个对象数组。修复it服务器端。这不应该是
auction[index][0]。id
无论如何?
auction[index]
应该是每个数组。这是一个包含另一个对象数组的数组。我添加了服务器端代码。数据来自MySQL数据库,将被推送到
streamArray
@BergiNo,然后它说:
在[index]之后添加[0]时,无法读取未定义的属性'id'@phpglueegreat,谢谢!你能回答我一个更离题的问题吗?因为你已经看过我的服务器代码了。你知道为什么
console.log('connected as'+connection.threadId);
输出两个唯一的ID,就像两个用户连接到我的网站一样?但实际上只有我有一个选项卡访问我的网站。这是关于mysql池的,我想让这个连接保持活动状态,并作为一个单独的mysql连接共享给所有访问网站的用户。对不起,不知道
。threadId
的意思,我没有o阅读文档/代码。
 updateSockets({ streamArray: fields });