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

我有一个使用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!

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

客户端:

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

请注意,msg和name.val()都是string值,从相应的input字段中获取。

服务器端:

 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是一个自定义的原型方法。

该消息作为广播在服务器端和客户端正确接收。

也许这是一个节点错误? 我刚刚在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! 

其他选项可能是一个编码问题(在terminal上看起来像“味精”,但不是严格意义上的那些字符?)

您的邮件必须采用格式“{”键入“:”msg“}”。