JSON没有正确序列化......我想?

时间:2011-02-06 16:56:24

标签: javascript json node.js socket.io

我有一个使用socket.io的Node.js项目。在其中,我尝试将客户端中的对象发送到服务器,如下所示:

socket.send(JSON.stringify({'type':'msg','message':'test'}));

当它到达服务器时,我在其上调用JSON.parse,然后检查是否object.type == 'msg'。当我运行代码并调用console.log(object.type)时,它返回"msg",但object.type == 'msg'返回false。这是怎么回事?

编辑:

失败的代码的相关部分是:

client.on('message', function(message, client){
    var envelope = JSON.parse(message);
    console.log(envelope.type);
    if(envelope.type == "msg") { console.log("yay!"); }
}

每当收到消息时,都会打印msg,但不会打印yay!

3 个答案:

答案 0 :(得分:0)

您是否已尝试在JSON消息中使用非文字作为键?我正在使用JSON消息构建一个小型聊天服务器来探索socket.io。这是我的相关代码:

客户端:

var jsonMsg = {
      action: 'SEND',
      body: msg,
      name: name.val()
    };
socket.send(JSON.stringify(jsonMsg));

请注意,msg和name.val()都是字符串值,从相应的输入字段中抓取。

服务器端:

client.on('message', function(m, c) {
  // parse message
  var msg = json.parse(m);

  switch (msg.action) {
    case 'SEND':
      // send message to channel
      var broadCast = {
        posted: date.toReadableDate(new Date(), 'timestamp'),
        message: msg.body,
        name: msg.name
      };
      socket.broadcast(json.stringify(broadCast));
      break;
  }
});

注意:toReadableDate是一种自定义原型方法。

邮件在服务器上正确收到,在客户端收到广播。

答案 1 :(得分:0)

也许这是一个节点错误?我刚刚在0.5.0-pre中试过它,它在有限的环境中工作正常。

> message = JSON.stringify({'type':'msg','message':'test'})
'{"type":"msg","message":"test"}'
>     var envelope = JSON.parse(message);
>     console.log(envelope.type);
msg
>     if(envelope.type == "msg") { console.log("yay!"); }
yay!

其他选项可能是编码问题(在终端上看起来像“msg”但严格来说不是字符串中的那些字符?)

答案 2 :(得分:-1)

您的邮件必须采用“{”类型“:”msg“}'的格式。